프로그래머스 / 큰 수 만들기 / python

맹민재·2023년 6월 24일
0

알고리즘

목록 보기
112/134

def solution(number, k):
    answer = ""
    stack = []
    number = map(int, list(number))
    
    for n in number:
        while stack and k and stack[-1] < n:
            stack.pop()
            k -= 1
        stack.append(n)
    while k:
        stack.pop()
        k -= 1
    
    for i in stack:
        answer += str(i)
    
    return answer

처음에넌 itertools의 combination을 사용해서 시도했다.
당연하게도 히든케이스에 대해서 시간 초과가 많이 발생했다

그 다음은 도저히 떠오르는 방법이 없어서 인터넷으로 검색해서 stack에대한 힌트를 얻고 바로 위와 같이 작성했다.

stack이 채워진 상태이고 k가 0이 아니고 stack의 마지막 숫자가 현재 n보다 작다면 -> stack의 마지막 숫자를 지우면 더 큰 수가 된다는 뜻이다.

이런식으로 진행하며 마지막에 k가 남아있다면 뒤에서 부터 k만큼 pop 해줌으로써 정답을 구할 수있다.

profile
ㄱH ㅂrㄹ ㅈr

0개의 댓글