임의의 수 number에서 k개의 수를 제거했을 때 얻을 수 있는 가장 큰 수를 return.
ex. number = 1924, k = 2
가능한 수의 집합 = [19, 12, 14, 92, 94, 24]
이 중 가장 큰 수 94를 return!
프로그래머스 강의를 바탕으로 코드를 작성했습니다.
programmers.co.kr/learn/courses/30/lessons/42746
풀이법
결과적으로 앞 자리가 클수록 큰 수이므로,
bucket을 하나 만들어,
number에서 한 숫자씩 담되,
지금 bucket에 들어간 수보다 넣을 수가 더 크면,
그 둘을 교환한다. (k가 남아있는 동안)
number의 모든 숫자를 거친 후에는 (탐색이 끝난 후에는)
bucket에 있는 수들을 이어 붙여 반환하면 된다.
예외 - 큰 숫자들이 이미 앞에 있어, bucket에 수를 담고도 k가 남아있으면, 뒤에서부터 k 자릿수만큼 떼고 반환.
ex. number = 9876, k = 1
~> bucket에는 9, 8, 7이 담기고, k는 여전히 1
~> 따라서, bucket[:-k]를 반환
코드 구현!
def solution(number, k):
bucket = []
for i, x in enumerate(number):
while len(bucket) > 0 and bucket[-1] < x and k > 0:
bucket.pop()
k -= 1
if k == 0:
bucket += list(number[i:])
break
bucket.append(x)
bucket += bucket[:-k] if k > 0 else bucket
return ''.join(bucket)
로직을 잘 세우고 코드로 구현하니 좋다.
메모
- enumerate()
enumerate(iterable, start=0)
Parameters:
Iterable: any object that supports iteration
Start: the index value from which the counter is to be started, by default it is 0
=> list, string에서 index와 value 모두 필요시 유용하게 쓰일 수 있다.
'프로젝트들 > 코딩 테스트' 카테고리의 다른 글
[코딩테스트] 프로그래머스 - N으로 표현 (Lv.3) in Python (0) | 2021.02.13 |
---|---|
[코딩테스트] 프로그래머스 - 더 맵게 (Lv.2) in Python (0) | 2021.02.13 |
[코딩 테스트] 프로그래머스 - 체육복 (Lv.1) in Python (0) | 2021.02.13 |
[코딩테스트] 프로그래머스 - 튜플 (Lv.2) in Python (0) | 2021.02.06 |
[코딩테스트] 프로그래머스 - 전화번호 목록 (Lv.2) in Python (0) | 2021.02.06 |
댓글