본문 바로가기
코딩테스트

[Python] 백준 20310번 - 타노스

by 박매트 2024. 6. 6.

https://www.acmicpc.net/problem/20310

 

나의 답

 

N = input()

zero_num = N.count('0')//2
one_num = N.count('1')//2

N = list(N)

total_num = len(N)

for i in range(len(N)):
    if N[i] == '1':
        N[i] = ''
        one_num-=1
    if one_num == 0:
        break
    
for i in range(len(N)-1,-1,-1):
    if N[i] == '0':
        N[i] = ''
        zero_num-=1
    if zero_num == 0:
        break
    
print(''.join(N))

 

문자열 입력 받은 후,

0과 1의 개수를 카운트 한다.

 

1의 경우 앞에서 부터 삭제해나가고,

0의 경우 뒤에서 부터 삭제해나가게 했다..

 

왜냐하면 사전 상 가장 작은 수가 되게 하려면

0은 최대한 앞에 많이 있어야 하고

1은 최대한 뒤에 많이 있어야 하므로

 

1은 앞부터 지워나가고

0은 뒤부터 지워나가면 된다고 생각...?을 했다.

 

그랬더니 답이 맞았ㄷ ㅏ..

근데 서브태스크는 별도로 생각을 안했는데 그냥 예제 중 ..하나인 것인가?

 

Kotlin 버전 답

fun main() {
    val N = readLine()!!
    
    val zeroNum = N.count { it == '0' } / 2
    val oneNum = N.count { it == '1' } / 2
    
    val charArray = N.toCharArray().toMutableList()
    
    val totalNum = charArray.size
    
    for (i in charArray.indices) {
        if (charArray[i] == '1') {
            charArray[i] = ''
            oneNum--
        }
        if (oneNum == 0) {
            break
        }
    }
    
    for (i in charArray.size - 1 downTo 0) {
        if (charArray[i] == '0') {
            charArray[i] = ''
            zeroNum--
        }
        if (zeroNum == 0) {
            break
        }
    }
    
    println(charArray.joinToString(""))
}

 

이번에 알게 된 것

문자열 중 일부 index 해당 문자만 바꾸려면 문자열을 list 형태로 바꿔야한다..!

그리고 list를 다시 문자로 이어붙일려면 ''.join(문자열이름) 으로