본문 바로가기

알고리즘/Lv. 2

프로그래머스 42626 더 맵게 파이썬 풀이

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을 반환한다.

느낀점

  • 쉬운데 은근 오래걸렸다. 자바로도 풀어봐야지