[프로그래머스]level2-큰 수 만들기-Python[파이썬]

s2ul3·2022년 9월 24일
0

문제링크

https://school.programmers.co.kr/learn/courses/30/lessons/42883

문제설명

알고리즘

큰 수가 앞 자리에, 작은 수가 뒷자리에 놓이도록! (제약조건 : 뺄수 있는 수의 개수)
  • 앞 자리에서부터 하나씩 꺼내어 모으되,
    * 이미 모아둔 것(stack 리스트) 중 지금 등장한 것보다 작은 수들은 빼낸다.
    • 이때 이미 모아둔 것을 탐색할 때 가장 마지막 원소만 탐색한다. (작은수가 뒤쪽에 있으므로)
  • 이렇게 모은 숫자들을 자릿수 맞추어 반환한다.
    * 아직 뺄 개수(k)를 채우지 못한 경우 -> 맨 끝에서 채우지 못한 것 만큼 빼낸다.

코드

def solution(number, k):
    stack = []
    for i, n in enumerate(number):
        while len(stack) > 0 and stack[-1] < n and k > 0:
            stack.pop()
            k -= 1
        if k == 0: # 숫자를 다 돌기전에 k가 0이 되는 경우, for문을 더 돌 필요가 없으므로 i번째 이후의 값을 붙이고 break
            stack = stack + list(number[i:])
            break
        stack.append(n)
    # 숫자를 다 돌고난 후에도 k가 0이 아닌경우, 마지막 k개를 뺀다.
    if k >0:
        stack = stack[:-k]
    return ''.join(stack)
profile
statistics & computer science

0개의 댓글