프로그래머스, 더 맵게
2024. 8. 22. 00:56ㆍETC/Algorithm
[유형]
자료구조
[문제링크]
https://school.programmers.co.kr/learn/courses/30/lessons/42626
[요약]
Leo가 가진 음식의 스코빌 지수를 담은 배열 scoville과 원하는 스코빌 지수 K가 주어질 때, 모든 음식의 스코빌 지수를 K 이상으로 만들기 위해 섞어야 하는 최소 횟수를 return 하도록 solution 함수를 작성해주세요. 모든 음식의 스코빌 지수를 K 이상으로 만들 수 없는 경우에는 -1을 return 합니다.
섞은 음식의 스코빌 지수 = 가장 맵지 않은 음식의 스코빌 지수 + (두 번째로 맵지 않은 음식의 스코빌 지수 * 2)
[문제풀이]
1. 배열 scoville을 힙으로 만든다.
2. scoville[0]가 K와 크거나 같다면, return 0 (while문을 돌지 않고 바로 return하면 되므로 필요없다 )
3. scoville[0]이 K보다 작을 동안, 두번의 heappop을 통해 새로운 스코빌 지수를 heappush. answer+=1
4. 만일, 스코빌 배열의 길이가 1이고 scoville[0]이 K보다 작으면, return -1 (K이상으로 만들어질 수 없다.)
5. 나머지 경우는, return answer
import heapq
def solution(scoville, K):
answer = 0
heapq.heapify(scoville)
```
while문을 돌지않고 바로 return하므로 필요없음!
if scoville[0] >= K:
return 0
```
while scoville[0] < K:
first = heapq.heappop(scoville)
second = heapq.heappop(scoville)
heapq.heappush(scoville,first+second*2)
if len(scoville) ==1 and scoville[0] <K:
return -1
answer+=1
return answer
'ETC > Algorithm' 카테고리의 다른 글
백준, 영화감독 숌,1436 (0) | 2024.08.23 |
---|---|
백준, 중앙값 구하기, 2696 (0) | 2024.08.22 |
백준, N번째 큰 수 ,2075 (0) | 2024.08.22 |
백준, 최소 힙, 1927 (0) | 2024.08.22 |
백준, 생태학, 4358 (0) | 2024.08.20 |