[프로그래머스-Lv2] 큰 수 만들기 / Python

📚 Problem Solving/Programmers

 

코딩테스트 연습 - 큰 수 만들기

 

programmers.co.kr

import sys

input = sys.stdin.readline

k = int(input())
number = input()


def solution(number, k):
    collected = []
    for (i, num) in enumerate(number):
        while collected and collected[-1] < num and k > 0:
            collected.pop()
            k -= 1
        if k == 0:
            collected += number[i:]
            break
        collected.append(num)
    collected = collected[:-k] if k > 0 else collected
    return "".join(collected)


print(solution(number, k))

 

해설

collected라는 리스트를 사용해 number의 수 하나하나를 저장한다. 우선, collected의 값이 for문의 현재 값보다 작으면 모두 collected에서 제거한 후 k를 1씩 줄인다.

 

k가 0이면 나머지 number의 값들을 collected에 합쳐주고 반복문을 멈춘다.

반복문이 끝나고 k가 0보다 크다면 이미 number는 내림차순으로 정렬되어 있다는 의미이기 때문에 뒤에서 k개를 제거한 숫자가 답이다. 반대로 k가 0이면 반복문에서 빠져나왔을 때의 collected가 답이 된다.