DecordRay

[프로그래머스] Level2 : 더 맵게[Python] 본문

알고리즘/프로그래머스

[프로그래머스] Level2 : 더 맵게[Python]

DecordRay 2023. 1. 19. 13:01
728x90
반응형

문제 : https://school.programmers.co.kr/learn/courses/30/lessons/42626

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

풀이 :

1. 입력으로 받은 scoville 리스트를 힙(최소힙)으로 변환

2. 무한 루프 실행

종료 조건 2가지

1. 모든 음식의 스코빌 지수를 K 이상으로 만들 수 없는 경우

  • scoville리스트의 원소가 1개이고, 첫번째 원소가 K보다 작으면 chk=False 저장 후 종료

2. 모든 음식의 스코빌 지수를 K 이상으로 만들 수 있는 경우

  • n1(첫번째 원소)이 K보다 크거나 같으면 종료

3. 종료 조건 해당하지 않을 경우 temp변수에 새로운 스코빌 지수 저장 후 answer + 1

4. while문 종료될 때까지 반복

 

* Tip - 최소힙이란? https://decordray.tistory.com/27 참고

 

코드 :

import heapq
def solution(scoville, K):
    answer = 0
    
    heapq.heapify(scoville) # 입력으로 받은 scoville리스트를 힙(최소힙)으로 변환
    chk = True  
    while True:
        if len(scoville) == 1 and scoville[0] < K:
            chk = False
            break
        n1 = heapq.heappop(scoville)    # scoville의 첫번째 원소 pop
        if n1 >= K:                     # 첫번째 원소가 K보다 크거나 같으면 반복문 종료
            break
        n2 = heapq.heappop(scoville)    # 첫번째 원소가 K보다 작다면 다시 첫번째 원소 pop(실질적 두 번째 원소)
        temp = n1 + (n2 * 2)            # 첫번째 원소를 저장한 n1과 두번째 원소를 저장한 n2로 새로운 스코빌 지수 생성
        heapq.heappush(scoville,temp)   # 새로운 스코빌지수 scoville리스트에 추가
        answer += 1
    if chk == False:                    # chk == False일 경우 K이상으로 만들 수 없는 경우이므로 answer = -1
        answer = -1
    
    return answer
728x90
반응형
Comments