[프로그래머스] 큰 수 만들기 [탐욕법(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을 반환해준다.
'알고리즘 문제풀이 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 가장 큰 수 [정렬] [python] (0) | 2020.09.23 |
---|---|
[프로그래머스] 소수 찾기 [완전탐색] [python] (0) | 2020.09.23 |
[프로그래머스] 문자열 압축 [2020 KAKAO BLIND RECRUITMENT] [python] (0) | 2020.09.22 |
[프로그래머스] 124 나라의 숫자 [연습 문제] [python] (0) | 2020.09.22 |
[프로그래머스] 프린터 [스택/큐] [python] (0) | 2020.09.22 |