728x90
난이도 : Lv. 2
풀이일 : 2412205
https://school.programmers.co.kr/learn/courses/30/lessons/42626
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
문제
아이디어
- 힙을 이용해 음식들의 스코빌 지수를 저장한다.
- 스코빌지수가 제일 작은 음식의 스코빌 지수가 K가 넘는지 확인하고, 넘지 않는다면 다음으로 스코빌 지수가 낮은 음식과 섞는다.
- 모든 음식의 스코빌 지수가 K를 넘는다면 섞은 횟수를, 아니라면 -1을 반환한다.
풀이 코드
import heapq
def solution(scoville, K):
answer = 0
foods = [] # 스코빌 지수 저장할 힙
for s in scoville: # 입력처리
heapq.heappush(foods, s)
while foods[0] < K and len(foods) > 1:
x = heapq.heappop(foods)
if x < K:
nx = heapq.heappop(foods)
heapq.heappush(foods, x + nx * 2)
answer += 1
return answer if foods[0] >= K else -1
- for 반복문 : 입력으로 주어진 스코빌 지수를 저장할 힙
- while 반복문 : 정렬된 스코빌 지수의 가장 작은 값이 K보다 작고, 음식 수가 두 개 이상인 경우 반복한다.
- 가장 스코빌 지수가 낮은 음식의 스코빌 지수가 K보다 작다면, 다음 음식과 섞고 answer 에 1을 더한다.
- 최종적으로 가장 스코빌 지수가 낮은 음식의 스코빌 지수가 K보다 크다면 음식을 섞은 횟수를 반환하고, 아니라면 -1을 반환한다.
느낀점
- 쉬운데 은근 오래걸렸다. 자바로도 풀어봐야지
'알고리즘 > Lv. 2' 카테고리의 다른 글
프로그래머스 87946 피로도 자바 풀이 (1) | 2024.12.24 |
---|---|
프로그래머스 87946 피로도 파이썬 풀이 (0) | 2024.12.23 |
프로그래머스 42746 가장 큰 수 파이썬 풀이 (1) | 2024.12.16 |
프로그래머스 12978 배달 파이썬 풀이 (0) | 2024.12.16 |
프로그래머스 43165 타겟 넘버 자바 풀이 (0) | 2024.11.11 |