[백준 / 2812] 크게 만들기


날짜: 2021년 10월 14일
소요 시간: 1시간 7분 23초
카테고리: 스택
태그: Gold.5, 2812, 파이썬

백준 2812 - 크게 만들기

입출력 예시

예제 입력예제 출력
4 294
1924 
7 33234
1231234 
10 4775841
4177252841 

내가 적은 코드

import sys

N , K = map(int, sys.stdin.readline().split())
num = list(sys.stdin.readline().strip())
count = K

number = []

for i in range(N):
    while count > 0 and number and number[-1] < num[i]:
        number.pop()
        count -= 1
    number.append(num[i])

answer = "".join(number[:N-K])

print(answer)

풀이 과정

number이라는 스택 리스트를 만들어서
numi번째 수를 number에 계속 추가하는 작업을 반복

number에 원소가 있다면
numi번째 수와 비교하여 더 작다면 pop()하고
count를 1씩 뺌

count가 0이 될 때까지 반복 한 후

numberN-K의 길이만큼 출력

베스트 코드

def remove_k_digits(num, k):
    num_stack = []

    for digit in num:
        while k and num_stack and num_stack[-1] < digit:
            num_stack.pop()
            k -= 1

        num_stack.append(digit)

    final_stack = num_stack[:-k] if k else num_stack

    return "".join(final_stack) or "0"


N, K = map(int, input().split())
number = input()

print(remove_k_digits(number, K))

반성

  • 베스트 코드는 내 코드와 같은 로직에서 함수를 통해 풀었다.




© 2021. by hminkim