알고리즘/프로그래머스

[프로그래머스 Level 2] 큰 수 만들기 - 파이썬(Python)

me1 2020. 7. 15. 18:19

문제 설명


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

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

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

 

제한조건

 

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

 

 

입출력 예

 

number k return
1924 2 94
1231234 3 3234
4177252841 4 775841

 

나의 풀이

 

def solution(number, k):
    a=[]
    for i,v in enumerate(number):
        while a and a[-1] < v and k > 0:
            a.pop()
            k -= 1
        if k == 0:
            a += number[i:]
            break
        a.append(v)
    if k > 0:
        a=a[:-k]

    return ''.join(a)

앞에서부터 큰 숫자를 만들어야 전체적으로 큰 숫자가 될 수 있습니다.

 

1. 문자열 number를 검사합니다.
2. 리스트 a에 원소가 있고 리스트 a의 마지막 값이 순회하는 v보다 작고 k가 0보다 크면
리스트 a의 마지막 원소를 제거하고 k를 1 줄입니다.
3-1. k가 0이면 리스트 a에 순회하는 뒤의 원소들을 추가해 리턴합니다.
3-2. 순회하는 v를 리스트 a에 추가합니다.
4. k가 0보다 크면 리스트 a의 뒤에서부터 k개를 자릅니다.
5. 리스트 a를 리턴합니다.

 


프로그래머스 '큰 수 만들기' : https://programmers.co.kr/learn/courses/30/lessons/42883

 

코딩테스트 연습 - 큰 수 만들기

 

programmers.co.kr