[프로그래머스] 큰 수 만들기

joon_1592·2022년 5월 22일

알고리즘

목록 보기
46/51

BOJ 2812 크게만들기와 동일한 문제다
k: 남은 제외할 숫자의 횟수

스택에 숫자를 집어넣으면서 top보다 현재 숫자가 크면 top 이하의 수나 될때까지 pop을 한 후에 현재 숫자를 push한다. pop의 횟수는 숫자를 제외하는 횟수이므로 k를 줄여준다
이 문제에 함정이 있는데, 스택을 다 채우더라도 k가 아직 0이 아닐 수 있다.(제외할 횟수를 반드시 k번 사용해야 한다). 따라서 스택의 앞에서부터 (원래 문자열의 길이) - k만큼 이 정답이다.

def solution(number, k):
    answer = ''
    stack = []
    L = len(number) - k
    for n in number:
        while stack and stack[-1] < n and k > 0:
            _ = stack.pop()
            k -= 1
        stack.append(n)

    answer = ''.join(stack[:L])
    return answer

백준 BOJ 2812

N, K = map(int, input().split())
number = input()
answer = ''
stack = []
k = K
for n in number:
    while stack and stack[-1] < n and k > 0:
        _ = stack.pop()
        k -= 1
    stack.append(n)
answer = ''.join(stack[:N - K])
print(answer)
profile
공부용 벨로그

0개의 댓글