더 맵게

zzwwoonn·2022년 6월 19일
0

Algorithm

목록 보기
55/71

첫 번째 풀이

heapq 를 이용한다 => 가장 첫 번째 원소는 무조건 최소임을 보장
처음에 길이가 2 이상임을 빼먹고 돌려서 1번 3번 테스트 케이스가 런타임 에러

import heapq

def solution(scoville, K):
    answer = 0
    
    heapq.heapify(scoville)
    # print(scoville)

    while len(scoville) >= 2 and scoville[0] < K and scoville[1] < K:
        # input()
        a = heapq.heappop(scoville)
        b = heapq.heappop(scoville)
        c = a + (2*b)
        heapq.heappush(scoville, c)
        # print(c)
        answer += 1
        # print(answer)

    return answer

< 정확성 >

< 효율성 >

못만드는 경우 -> 예외처리 -> 1, 3, 8, 14 해결

질문하기 => "h가 비어있지 않은 경우를 예외로 안 넣으면 최소값 빠지자마자 남은 값이 K를 넘어서 return 해버리네요"

두 번째 풀이

import heapq

def solution(scoville, K):
    answer = 0

    heapq.heapify(scoville)
    # print(scoville)

    if min(scoville) >= K:
        return 0

    while True:
        # input()
        if len(scoville) < 2:
            break
        if scoville[0] >= K and scoville[1] >= K:
            break

        # print("before = ", scoville)
        a = heapq.heappop(scoville)
        # print("a = ", a)
        b = heapq.heappop(scoville)
        # print("b = ", b)
        c = a + (2*b)
        # print("c = ", c)
        heapq.heappush(scoville, c)
        # print("after = ",scoville)
        answer += 1
        # print("answer = ", answer)

    
    if answer > 0 and scoville[0] < K:
        answer = -1

    return answer

0개의 댓글