프로그래머스 - 큰 수 만들기 (Greedy)Python

timo·2021년 1월 8일
0
post-thumbnail

https://programmers.co.kr/learn/challenges

문제 설명

어떤 숫자에서 k개의 수를 제거했을 때 얻을 수 있는 가장 큰 숫자를 구하려 합니다.

예를 들어, 숫자 1924에서 수 두 개를 제거하면 [19, 12, 14, 92, 94, 24] 를 만들 수 있습니다. 이 중 가장 큰 숫자는 94 입니다.

문자열 형식으로 숫자 number와 제거할 수의 개수 k가 solution 함수의 매개변수로 주어집니다. number에서 k 개의 수를 제거했을 때 만들 수 있는 수 중 가장 큰 숫자를 문자열 형태로 return 하도록 solution 함수를 완성하세요.

제한 조건

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

입출력 예

numberkreturn
1924294
123123433234
41772528414775841

풀이

  • stack을 사용한 풀이다.
def solution(number, k):
    stack = [number[0]]
    if len(number) != 1:
        for num in number[1:]:
            while len(stack) > 0 and stack[-1] < num and k > 0:
                k -= 1
                stack.pop()
            stack.append(num)
        if k != 0:
            stack = stack[:-k]
    return "".join(stack)

복습 지점

  1. 계속해서 효율성 부분에서 실패했다. 내가 생각한 기본적인 알고리즘을 개선하려햇지만 근본적을 해결하지 못햇다.
  2. 결국 구글링을 했고, 근본적인 알고리즘에 문제가 있다는 것을 알게됬다. 자잘한 개선으로 효율성 문제를 해결 할 수 없었다.
  3. 전혀 생각하지 못한 stack을 사용한 알고리즘이 정답이었고, 이를 또 구현하는데도 상당한 시간이 걸렸다.
profile
Backend Developer

0개의 댓글