알고리즘(Python) - 더 맵게
Input
1 | scoville = [1, 2, 3, 9, 10, 12] |
Expected Output
1 | return = 2 |
목표
- 모든 음식의 스코빌 지수를 K 이상으로 만드는 것
위의 목표를 이루기 위해 하는 작업
- (섞은 음식의 스코빌 지수) = 가장 맵지 않은 음식의 스코빌 지수 + (두 번째로 맵지 않은 음식의 스코빌 지수 * 2)
모든 음식의 스코빌 지수가 K 이상이 될 때까지 반복
- 배열 scoville과 원하는 스코빌 지수 K가 주어질 때, 모든 음식의 스코빌 지수를 K 이상으로 만들기 위해 섞어야 하는 최소 횟수를 return하는 함수를 작성
조건
- 1 <= length(scoville) <= 1,000,000
- 0 <= K <= 1,000,000,000
- 0 <= each element of scoville <= 1,000,000
- 모든 음식의 스코빌 지수를 K 이상으로 만들 수 없는 경우에는 -1을 return
코드
Python
1 | import heapq |
해설
- 항상 배열의 정렬을 유지하는 힙을 이용한다.
- 가장 작은 스코빌과 두 번째로 작은 스코빌을 뽑아내어 새로운 스코빌을 만든다.
- 만약 배열에 원소가 하나만 남고 그 원소마저 K 보다 작다면 -1을 리턴한다.
- 위의 상황이 아니라면 count를 늘린다.
- while 루프는 가장 작은 스코빌이 K 보다 작은지 점검한다.
- 만약 가장 작은 스코빌이 K 보다 크다면 루프에 진입하지 않고 count를 리턴한다.