코딩테스트

[python] (백준) 크게 만들기

뇨롱 2023. 9. 25. 00:00
대회명/문제출처: 백준 크게 만들기 (2812)
https://www.acmicpc.net/problem/2812
유형: Greedy

<풀이방법>

1) 일단 무조건 Greedy 방법으로 풀었다.

앞에서 작은 숫자를 지워나가는 것이 낫기 때문 -> 뒤로 가면 아무리 수가 작아도 10의 거듭제곱만큼 크기를 늘릴 수 있다.

2) 풀다 보니, 조건 몇개를 추가하게 되었다. 

첫번째, k가 다 소진되지 않을 경우는?

마지막에 k>0인 경우에 slicing 하는 방법으로 해결하였다. 

두번째, k==0인 상태

k=0이라면 무조건 그냥 추가하고 continue 문 돌도록 바꾸었다.

n,k=map(int,input().split())
number=input()
stack=[]

for i in range(n):
	if len(stack)==0 or k==0:
		stack.append(number[i])
		continue
	while stack and stack[-1]<number[i] and k>0: 
		k-=1
		stack.pop()
	stack.append(number[i])

if k>0:
	stack=stack[:-k]

print("".join(stack))