알고리즘/프로그래머스
[프로그래머스 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