본문 바로가기
알고리즘/[python] 백준 BOJ

[python] 백준 2812 크게 만들기

by Alan_Kim 2023. 3. 16.
728x90
반응형

https://www.acmicpc.net/problem/2812

 

2812번: 크게 만들기

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

www.acmicpc.net

문제 해결

  • stack을 쌓아서 앞쪽에 큰수들로 이루어지도록 하는 것이 포인트
  • 특이 케이스로 같은 숫자가 계속 나와서(예: 33333) 제거하기 애매한 상황이 나올 수 있음
  • 따라서 stack이 많이 쌓일 수도 있으므로 앞에서부터 n-k개를 출력해야한다.

 

CODE

import sys
input = sys.stdin.readline
from collections import deque
n, k = map(int, input().split())
que = deque([int(c) for c in str(input().rstrip())])
A = []
A.append(que.popleft())
cnt = 0
while que:
    x = que.popleft()
    while cnt<k and len(A)>0:
        if A[-1] < x:
            A.pop()
            cnt +=1
            continue
        break
    A.append(x)
ans = ''.join(map(str,A[:n-k]))
print(int(ans))
728x90
반응형

댓글