[프로그래머스] 큰 수 만들기 [탐욕법(Greedy)] [python] Level2

 

문제 설명

 

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

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

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

 

 

설계 및 구현

 

number의 수를 answer에 넣으면서 answer에 더 작은수가 있다면 k번 까지 삭제를 해주면서접근 방법

answer에 쌓아주면 가장 큰수를 만들 수 있다.

 

ex)입출력 예3 number = "4177252841", k = 4 일 경우 

number[i]                                        answer                                           k

4 4 4
1 41 4
7 7 2
7 77 2
2 772 2
5 775 3
2 7752 3

이런 식으로 진행된수 k번 지웠는데 number을 모두 순회하지 못했다면 그 부분을 answer에  그래도 붙여서 반환해주면 해결 할 수 있다.

 

my_solution

def solution(number, k):
    # 1
    answer = []
    number = list(number)
    # 2
    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)
    
    # 3
    if k > 0:
        return answer[:len(number)-k]
    # 4
    return answer

1. 최댓값을 쌓을 answer을 생성, number을 리스트로 변경해준다.

2. number을 순회한다.

   만약 answer이 비어있다면 number[i]를 추가

   아니면 while문 실행

              answer[-1]삭제, k -= 1

              number[i]를 answer에 추가

3. k가 0보다 크다면 answer을 len(number) - k만큼만 반환  ex) number = "999" k = 2의 경우를 위한 예외

4. 그게 아니면 answer을 반환해준다.

반응형

+ Recent posts