-문제: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)
'백준 > Greedy' 카테고리의 다른 글
[그리디/백준] 11047번: 동전0 (2차) (0) | 2022.06.23 |
---|---|
[그리디/백준] 2839번: 설탕 배달(2차) (0) | 2022.05.30 |
[백준] 10775번: 공항(다시) (0) | 2022.02.11 |
[백준] 2810번: 컵홀더 (0) | 2022.02.11 |
[백준] 8980번: 택배(다시) (0) | 2022.02.10 |