본문 바로가기
알고리즘/그리디

[백준][Python] 2812번 크게 만들기

by 임짠짠 2022. 5. 2.
반응형
 

2812번: 크게 만들기

N자리 숫자가 주어졌을 때, 여기서 숫자 K개를 지워서 얻을 수 있는 가장 큰 수를 구하는 프로그램을 작성하시오.

www.acmicpc.net

 

 

코드

n,k = map(int, input().split())
num = int(input())
n_list = list(map(int,str(num)))  # 숫자 분리할 때 먼저 문자열로 바꾼 후 분리
stack = []

cnt = 0
stack.append(n_list[0])

for i in range(1,n):
    while stack and n_list[i] > stack[-1]:
        if cnt == k:
            break
        stack.pop()
        cnt+=1

    stack.append(n_list[i])

while cnt != k:
    stack.pop()
    cnt+=1
    
for i in stack:
    print(i,end='')

 

설명

숫자를 한 자릿수 씩 분리하려면 먼저 그 수를 문자열로 바꿔준 후 리스트에 넣어주면 된다. 

스택을 이용해서 만약 가장 위에 있는 수가 넣으려는 수보다 작을 경우 pop을 해주고 cnt를 증가시켜줬고, 클 경우 그냥 그 수를 스택에 push 해줬다. 

7 5
9929191
99

처음에는 위의 반례를 만족하지 못했다. cnt가 k가 되지 않았는데도 종료되어서 마지막에 while문을 추가해줬다.

반응형

댓글