20310번: 타노스백준/문제2024. 4. 4. 13:46
Table of Contents
문제 출처 : https://www.acmicpc.net/problem/20310
언어 : Kotlin
문제 설명 :
어느 날, 타노스는 0과 1로 이루어진 문자열 S를 보았다. 신기하게도, S가 포함하는 0의 개수와 S가 포함하는 1의 개수는 모두 짝수라고 한다. 갑자기 심술이 난 타노스는 S를 구성하는 문자 중 절반의 0과 절반의 1을 제거하여 새로운 문자열 S'를 만들고자 한다. S'로 가능한 문자열 중 사전순으로 가장 빠른 것을 구하시오.
입력 :
문자열 S가 주어진다.
출력 :
S'로 가능한 문자열 중 사전순으로 가장 빠른 것을 출력한다.
제한 사항 :
- 시간 제한 : 1초
- 메모리 제한 : 1024MB
- S의 길이는 2 이상 500 이하이다.
- S는 짝수 개의 0과 짝수 개의 1로 이루어져 있다.
- S의 길이는 4의 배수이다.
- S의 홀수 번째 문자는 1, 짝수 번째 문자는 0이다.
- 추가적인 제약 조건이 없다.
입출력 예 :
입력 | 출력 |
1010 | 01 |
000011 | 001 |
풀이 :
import java.io.BufferedReader
import java.io.BufferedWriter
import java.io.InputStreamReader
import java.io.OutputStreamWriter
fun main() = with(BufferedReader(InputStreamReader(System.`in`))) {
val bw = BufferedWriter(OutputStreamWriter(System.out))
val arr = IntArray(2) { 0 }
val sb = StringBuilder(readLine()).also {
it.toString().also {
arr[0] = it.count { it == '0' } / 2
arr[1] = it.count { it == '1' } / 2
}
}
for (i in sb.indices) {
if (arr[1] != 0 && sb[i] == '1') {
sb.setCharAt(i, '9')
arr[1]--
}
if (arr[1] == 0) break
}
for (i in sb.length - 1 downTo 0) {
if (arr[0] != 0 && sb[i] == '0') {
sb.setCharAt(i, '9')
arr[0]--
}
if (arr[0] == 0) break
}
bw.write(sb.filterNot { it == '9' }.toString())
bw.flush()
bw.close()
}
'백준 > 문제' 카테고리의 다른 글
9324번: 진짜 메시지 (1) | 2024.04.05 |
---|---|
11091번: 알파벳 전부 쓰기 (0) | 2024.04.04 |
1672번: DNA 해독 (0) | 2024.04.04 |
1414번: 불우이웃돕기 (0) | 2024.04.03 |
17094번: Serious Problem (0) | 2024.04.03 |
@스몰스테핑 :: 작은 발걸음
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!