🧩 문제 : 더 맵게
💡 정리
입력값으로 스코빌 지수가 담긴 리스트와 스코빌 지수 K가 주어진다.
리스트에 담긴 지수 중 스코빌 지수가 K 이하인 것 들은 문제에서 주어진 수식을 토대로 섞는다.
이때, 몇번 섞어야 모든 음식의 스코빌 지수가 K가 되는지 구하면 된다.
💪🏻 풀이 과정
🌱 아이디어
1️⃣ 최소힙이 구현되어 있는 heapq를 사용하자! > 값 삽입시 알아서 오름차순 정렬됨
2️⃣ 맨 앞에 있는 스코빌 지수가 K 이하인 경우 섞어서 새로운 스코빌 지수를 구해 heapq에 push 한다. (연산 횟수도 하나 증가!)
3️⃣ 원소가 하나 뿐인데, 스코빌 지수가 K 이하이면 -1를 리턴하며 반복문을 종료하게 된다.
📍보러가기 > heapq 사용법
💻 코드
import heapq
def solution(scoville, K):
# answer : 연산 횟수를 담을 변수
answer = 0
# 스코빌 지수 heap으로 변환
heapq.heapify(scoville)
while scoville[0] < K:
# 새로운 스코빌 지수 연산
mix = int(heapq.heappop(scoville)) + int((heapq.heappop(scoville))*2)
# 새로운 스코빌 지수를 heap에 push
heapq.heappush(scoville, mix)
answer += 1
# 반복문 종료 조건
if len(scoville) == 1 and scoville[0] < K:
return -1
return answer
💭결과
'알고리즘' 카테고리의 다른 글
[프로그래머스 / C++ / Python] 타겟 넘버 (1) | 2023.03.13 |
---|---|
[BOJ / C++] 1764 듣보잡 (0) | 2023.03.09 |
[프로그래머스 / Python] N으로 표현 (0) | 2023.02.28 |
[BOJ / Python] 지름길 (0) | 2023.02.21 |
[BOJ / Python] 9372 상근이의 여행 (0) | 2023.02.20 |