백준 #2812 크게 만들기
코드
import sys
sys.stdin = open("input.txt")
input = sys.stdin.readline
n, k = map(int, input().split())
num = list(map(int, input().rstrip()))
stack = [num[0]]
for i in range(1, n):
while stack and num[i] > stack[-1] and k:
stack.pop()
k -= 1
stack.append(num[i])
while k:
stack.pop()
k -= 1
for x in stack:
print(x, end="")
풀이
스택으로 푼 문제이다.
처음에 주어진 숫자의 첫번째 수를 스택에 넣어주고 다음 수와 스택에 있는 수들을 비교하면서 지울 수 있는 기회(k)가 남아있고 스택의 마지막 수가 현재 수보다 작다면 pop해준다.
처음에 틀렸었다! 이유는 k가 남아있는데 작은 숫자들이 뒤에 있어서 k를 다 쓰지 못하는 경우를 고려를 못해줬었다.
k가 0이 될때까지 스택에서 숫자들을 제거함으로써 해결했다!
댓글남기기