[파이썬] 더 맵게
문제 출처 : 프로그래머스 더 맵게
👩🦰 나의 풀이
import heapq
def solution(scoville, K):
answer = 0
heapq.heapify(scoville) #리스트를 힙으로 변환
while scoville[0]<K: #힙은 자동으로 정렬되기 때문에 0번째 인덱스가 가장 작음
try:
heapq.heappush(scoville, heapq.heappop(scoville)+heapq.heappop(scoville)*2)
except IndexError:
return -1
answer+=1
return answer코드를 입력하세요
힙 scoville의 0번째 인덱스 값이 K보다 작을 동안에만 while문을 실행한다.
힙에서 더이상 pop할 요소가 없을 때 IndexError로 처리되어 -1이 반환된다.
import heapq
def solution(scoville, K): # 스코빌 지수 배열, 원하는 스코빌 지수
answer = 0
heapq.heapify(scoville) # 힙으로 변환
while len(scoville) > 1 : # 값이 2개 이상 있어야 연산 가능
answer+=1
first=heapq.heappop(scoville) # 가장 작은 값
second=heapq.heappop(scoville) # 두 번째로 작은 값
heapq.heappush(scoville, first+second*2)
if scoville[0] >= K :
return answer # 모든 음식의 스코빌 지수를 K이상으로 만들기 위해 섞는 최소 횟수
# 모두 K이상이 안 되면 -1
return -1 코드를 입력하세요
scoville의 길이가 2이상일 동안 반복문이 작동한다. 반복문이 끝난 후 return -1을 하는 것은 모든 음식의 스코빌 지수가 K이상이 안 된다는 것이다.
👩🦳 다른 사람 풀이
import heapq as hq
def solution(scoville, K):
hq.heapify(scoville)
answer = 0
while True:
first = hq.heappop(scoville)
if first >= K:
break
if len(scoville) == 0:
return -1
second = hq.heappop(scoville)
hq.heappush(scoville, first + second*2)
answer += 1
return answer코드를 입력하세요
일차적으로 힙 scoville에서 뽑은 값을 K와 비교한 뒤 scoville의 길이가 0인지 보고있다.
Indexerror을 막기위해 힙의 길이가 0일 경우 바로 -1을 리턴한다.
Author And Source
이 문제에 관하여([파이썬] 더 맵게), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@likelasttime/파이썬-더-맵게저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)