Week 01 ~ 04 : 알고리즘 문제 풀이

파이썬 백준 2812 크게 만들기

정글러 2021. 11. 15. 22:39
import sys
input = sys.stdin.readline

n, k = map(int, input().split())
l = input()
stack = [int(l[0]),]
count = 0
for i in range(1, n) :
    while stack != [] and count < k :
        if stack[-1] < int(l[i]) :
            del stack[-1]
            count = count + 1
        else :
            break
    stack.append(int(l[i]))
for i in range(n - k) :
    print(stack[i], end = '')

뒷자리 숫자가 앞자리보다 크면 앞자리를 지우고 뒷자리가 그 자리를 차지한다.

같은 숫자가 여럿 나오다가 지워야 할땐 count가 허용하는 선에서 최대한 날려야 한다.

지울때마다 count를 세다가 count가 k가 됐을때의 스택이 답

 

지금보니 6째줄에 오타가 있다.

처음엔 같은 숫자가 얼마나 연속됐는지까지 담은 리스트를 스택에 넣으려해서 그런가 쉼표가 있는데

저대로 제출했는데 정답ㅋㅋ

자비로운 파이썬의 세계