프로그래머스 - 큰 수 만들기

오늘의 문제

프로그래머스 > 연습문제 > 큰 수 만들기

number에서 k 개의 수를 제거했을 때 만들 수 있는 수 중 가장 큰 숫자를 문자열 형태로 return 하도록 solution 함수를 완성하세요.

조건

  1. number는 1자리 이상, 1,000,000자리 이하인 숫자입니다.
  2. k는 1 이상 number의 자릿수 미만인 자연수입니다.

풀이 방법

1
2
3
4
5
6
7
8
9
10
11
12
13
def solution(number, k):
    stack = [number[0]]

    for num in number[1:]:
        while len(stack) > 0 and k > 0 and stack[-1] < num:
            k -= 1
            stack.pop()
        stack.append(num)

    if k > 0:
        stack = stack[:-k]

    return ''.join(stack)

들어오는 값이 stack 값보다 크면, 기존의 값을 제거하고 새로운 값으로 바꾼다.
stack 과 k가 0보다 크고, stack의 마지막 요소가 num보다 작을 경우, k의 횟수를 줄이고 스택 마지막 요소 제거한다.
만일 k가 0보다 클 경우 stack을 뒤에서부터 k만큼 제거한다.

사담

인터넷의 여러 답지를 보고 해석했다. 100퍼센트 이해는 못했지만… ㅠㅠ
효율성 말고 하기한 내 코드도 정답으로 되는지 궁금하다. 이렇게 해도 맞을 거 같은데… 흠

1
2
3
4
5
6
import itertools

def solution(number, k):
    result = list(itertools.combinations(number, len(number) - k))
    result = list(map(lambda x: int(''.join(x)), result))
    return str(max(result))