Notice
Recent Posts
Recent Comments
Link
REC
프로그래머스 Lv.2: 더 맵게 - Python 풀이 본문
SMALL
오늘의 문제
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
내 풀이
import heapq
def solution(scoville, K):
answer = 0
heapq.heapify(scoville)
while scoville[0] < K:
if len(scoville) == 1:
answer = -1
break
else:
new = heapq.heappop(scoville) + (heapq.heappop(scoville) * 2)
heapq.heappush(scoville, new)
answer += 1
return answer
그냥 문제 보고 생각난 그대로 구현했더니 1트에 통과. 쉬운 문제다.
Leo는 모든 음식의 스코빌 지수가 K 이상이 될 때까지 반복하여 섞습니다. Leo가 가진 음식의 스코빌 지수를 담은 배열 scoville과 원하는 스코빌 지수 K가 주어질 때, 모든 음식의 스코빌 지수를 K 이상으로 만들기 위해 섞어야 하는 최소 횟수를 return 하도록 solution 함수를 작성해주세요.
scoville의 모든 값이 K 이상이 될 때까지 반복한다는 문구에서 '최소 힙'을 써야겠다는 것을 캐치할 수 있습니다.
생각한 로직
1) scoville을 최소 힙으로 만든다.
2) 최소 힙의 root 값(= 힙의 최솟값)이 K보다 작으면 최솟값 2개를 뽑아 스코빌 지수를 갱신하는 행위를 반복한다. 반복하며 answer를 1씩 증가시킨다. 단, 이 때 최솟값이 root 값 1개라면 '모든 음식의 스코빌 지수를 K 이상으로 만들 수 없는 경우'에 속하므로 -1을 반환한다.
이걸 그대로 코드로 구현하면 끝!
LIST
'Algorithm' 카테고리의 다른 글
| 프로그래머스 Lv.1: K번째 수 - Python 풀이 (0) | 2025.01.25 |
|---|---|
| 프로그래머스 Lv.3: 이중우선순위큐 - Python 풀이 (0) | 2025.01.24 |
| 백준 2075번: N번째 큰 수 (S3) - Python 풀이 (0) | 2025.01.21 |
| 백준 5525번: IOIOI (S1) - Python 풀이 (0) | 2025.01.18 |
| 백준 11723번: 집합 - Python 풀이 (0) | 2025.01.17 |