0. 문제 링크
https://www.acmicpc.net/problem/2812
1. 풀이 방법
- while(특정 숫자가 들어오면 스택의 앞선 숫자와 비교한다.)
- 이때 들어오는 숫자가 더 크다면 스택을 팝한다. (k에 1씩 빼면서)
- 위 방식을 사용하면 앞자리가 큰 순서대로 스택에 쌓인다.
- 반복문을 탈출했는데, k가 0이 아니라면 이는 숫자가 대체적으로 내림차순이라는 의미이므로 스택에서 앞의 n - k개의 숫자를 출력한다.
2. 코드
import sys
input = sys.stdin.readline
def sol():
n, k = map(int, input().split())
maps = list(input().strip())
stack = []
ansLen = n - k
for i in range(n):
while stack and stack[-1] < maps[i] and k > 0:
# 오등큰수와 매우 흡사함
# while 현재 숫자 들어오는 숫자보다 스택에 있는 숫자가 작으면 팝함
# 빼는 횟수만큼 k에서 1을 빼야함
k -= 1
stack.pop()
stack.append(maps[i])
print(''.join(stack[0:ansLen])) # n이 내림차순이라면 스택에 숫자가 다 들어감 == k가 0이 아님. 따라서 ansLen만큼 프린트함
if __name__ == "__main__":
sol()
3. 마무리
'Computer Science > 알고리즘' 카테고리의 다른 글
[백준 - Python] 2146 - 다리 만들기 (1) | 2023.09.18 |
---|---|
[백준 - Python] 1039 - 교환 (0) | 2023.08.25 |
[백준 - Python] 1644 - 소수의 연속합 (0) | 2023.08.25 |
[백준 - Python] 2252 - 줄 세우기 (0) | 2023.08.20 |
[백준 - Python] 16637 - 괄호 추가하기 (0) | 2023.08.20 |