프로그래머스, 더 맵게

2024. 8. 22. 00:56ETC/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