알고리즘 문제

[Python] 큰 수 만들기(그리디)

Everyday Happy ❤︎ 2023. 11. 26. 16:07
 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

문제 설명

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

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

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

 

제한 조건

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

입출력 예


제출

def solution(number, k):
   
    answer = []
    number = list(number)

    for i in range(len(number)):
        if len(answer) == 0:
            answer.append(number[i])
        else:
            while answer and answer[-1] < number[i] and k != 0:
                answer.pop(-1)
                k-=1
            answer.append(number[i])
    answer = "".join(answer)
    
    if k > 0:
        return answer[:len(number)-k]
    
    return answer

 

💬 후기

number 숫자가 answer 숫자보다 크면 작은 숫자가 pop되고 큰 숫자가 추가되는 방법으로 접근해보았다.

number를 반복문을 통해 순회하면서 비어있으면 그대로 추가되고 작으면 삭제 ~ 크면 추가 ~

그럼 최종적으로 가장 큰 answer가 출력된다!!