-문제:https://www.acmicpc.net/problem/2812

Gold level4 문제

-정답풀이:

N,K=map(int,input().split())
nums=list(input())

result=[]
k=K
for i in range(N) :
    while k>0 and result and result[-1]<nums[i]:
        result.pop()
        k-=1

    result.append(nums[i])
    
print(''.join(result[:N-K]))

-풀이 공부:

스택으로 풀지 않으면 메모리 초과가 발생한다고 한다. 

주어진 숫자와 result(stack)의 가장 끝 값을 비교해서 result(stack)값이 작으면 result의 끝 원소를 꺼내고 한번 꺼냈으니 k의 값을 하나 감소시킨다. -> 계속 큰 수를 만들어가야해서 그런 것 같다 

result의 끝값이 nums[i]값보다 클 때 while문을 나오고, nums[i]원소를 넣는다

k가 0일 때 for문을 나오므로 이전에 입력받은 N,K값을 이용해서 출력해주면 된다 

 

 

 

이 예제 '5'부분에서 잘못 이해한 것 같다. 

5다음이 2라서 5는 없어지지 않고, 2 뒤에 있는 8 때문에 2가 pop 된다. (7/17)

+ Recent posts