문제
https://school.programmers.co.kr/learn/courses/30/lessons/42626
- 어떻게 풀었는가?
- 우선순위대로 계속 정렬해야하는 문제니까 => 힙 정렬 사용하자
- 스코빌 지수 기준 최소 힙 생성 -> 가장 작은 값 2개 pop -> 섞은 음식으로 가공 후 push-
- 모든 음식이 k이상이 될때까지 반복 = 루트 노드가 K이상이 될때까지 진행
- 우선순위대로 계속 정렬해야하는 문제니까 => 힙 정렬 사용하자
1차 풀이 - 효율성 통과 / 정확성 실패(문제 잘 안읽음)
- 에러 이유 → 조건 2개 안읽음
- 모든 음식의 스코빌 지수를 K 이상으로 만들 수 없는 경우에는 -1을 return 합니다.
- 2개씩만 묶을 수 있으니 루프는 원소가 2개남았을때까지가 마지노선이다
'''
우선순위대로 계속 정렬해야하는 문제니까 => 힙 정렬 사용하자
- 스코빌 지수 기준 최소 힙 생성 -> 가장 작은 값 2개 pop -> 섞은 음식으로 가공 후 push
- 모든 음식이 k이상이 될때까지 반복 = 루트 노드가 K이상이 될때까지
'''
import heapq
def solution(scoville, K):
answer = 0
# 최소 힙 생성
h = []
for s in scoville:
heapq.heappush(h, s)
while h:
m = heapq.heappop(h)
if m >= K: #루트 노드가 K이상이 될 때까지
break
heapq.heappush(h, m + heapq.heappop(h) * 2)
answer += 1
return answer
2차 풀이 - 통과
'''
우선순위대로 계속 정렬해야하는 문제니까 => 힙 정렬 사용하자
- 스코빌 지수 기준 최소 힙 생성 -> 가장 작은 값 2개 pop -> 섞은 음식으로 가공 후 push
- 모든 음식이 k이상이 될때까지 반복 = 루트 노드가 K이상이 될때까지
'''
import heapq
def solution(scoville, K):
answer = 0
# 최소 힙 생성
h = []
for s in scoville:
heapq.heappush(h, s)
while len(h) > 1:
m = heapq.heappop(h)
if m >= K: #루트 노드가 K이상이 될 때까지
break
heapq.heappush(h, m + heapq.heappop(h) * 2)
answer += 1
# 모든 음식의 스코빌 지수를 K 이상으로 만들 수 없는 경우
if heapq.heappop(h) < K:
return -1
return answer
'개발 > Algorithm' 카테고리의 다른 글
| [프로그래머스/42628/level3/고득점kit] 이중우선순위큐 - 최소힙,최대힙 (0) | 2023.09.02 |
|---|---|
| [프로그래머스/42884/level3/고득점kit] 단속 카메라 - 그리디 (0) | 2023.08.30 |
| [프로그래머스/42861/level3/고득점kit] 섬 연결하기 - 최소신장트리, 크루스칼 Kruskal 알고리즘 (0) | 2023.08.22 |
| [프로그래머스/42862/level1/고득점kit] 체육복 - 그리디 (0) | 2023.08.14 |
| [프로그래머스/42885/level2/고득점kit] 구명보트 - 그리디, 두 포인터 사용 (0) | 2023.08.14 |