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째줄에 오타가 있다.
처음엔 같은 숫자가 얼마나 연속됐는지까지 담은 리스트를 스택에 넣으려해서 그런가 쉼표가 있는데
저대로 제출했는데 정답ㅋㅋ
자비로운 파이썬의 세계
'Week 01 ~ 04 : 알고리즘 문제 풀이' 카테고리의 다른 글
파이썬 백준 2164 카드2 (0) | 2021.11.15 |
---|---|
파이썬 백준 18258 큐2 (0) | 2021.11.15 |
파이썬 백준 6549 히스토그램에서 가장 큰 직사각형 (0) | 2021.11.13 |
파이썬 백준 10000 원 영역 (0) | 2021.11.13 |
파이썬 백준 2493 탑 (0) | 2021.11.13 |