Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 전화번호 목록
- react-native-navigation
- 더 맵게
- Queue
- heap
- hash
- 가장 큰 수
- react-native bind
- 이중우선순위큐
- Brute Force
- Stack
- 다리를 지나는 트럭
- 소수찾기
- Virtual DOM
- browser workflow
- sorting
- 깊이우선탐색
- Data Structure
- 타겟 넘버
- k번째수
- 디스크 컨트롤러
- 주식
- Algorithm
- react
- 넓이우선탐색
- Javascript
- react-native
- Programmers
- 완주하지 못한 선수
- 기능개발
Archives
- Today
- Total
개발 블로그
[프로그래머스/python/Heap] 더 맵게 본문
1. 서론
위 문제는 Heap으로 분류되어 있으나 이전 문제들과 달리 javascript를 지원하지 않는 문제이기 때문에 python으로 문제를 풀었다. python은 heap에 대한 라이브러리로 heapq를 지원하기 때문에 heapq를 사용했다.
2. 문제설명(출처: programmers.co.kr/learn/courses/30/lessons/42626)
3. 문제 풀이
1) 문제에서 모든 음식의 스코빌 지수를 K이상으로 만들고 싶습니다. 라고 했기 때문에 스코빌 지수가 0인 경우 바로 0을 반환한다.
2) 문제에서 모든 음식의 스코빌 지수가 K 이상이 될 때까지 반복하여 섞습니다. 라고 하였으니 min heap을 사용해 root 노드와 root의 자식를 반복해서 섞는다.
3) 2번의 작업을 반복하기 위해 heapq에서 2개의 요소를 pop한 뒤, 스코빌 지수를 계산하고 이를 다시 push한다.
4) heap의 root 노드가 스코빌 지수 K를 넘기거나, 모든 스코빌 지수를 계산했음에도 K를 넘기지 못했다면 반복문을 끝낸다.
4) heap의 요소들이 K를 넘겼다면 섞은 횟수를 반환하고, 넘기지 못했다면 -1을 반환한다.
4. 결과코드
import heapq
def solution(scoville, K):
if K == 0:
return 0
answer = 0
heap = []
for i in scoville:
heapq.heappush(heap, i)
i = 0
while(heap[0] <= K and i < len(scoville)-1):
heapq.heappush(heap, heapq.heappop(heap) + heapq.heappop(heap) * 2)
answer += 1
i+= 1
if heap[len(heap)-1] <= K:
answer = -1
return answer
'IT > Programmers' 카테고리의 다른 글
[프로그래머스/Javascript/Stack+Queue] 기능개발 (0) | 2021.04.06 |
---|---|
[프로그래머스/Javascript/Stack] 주식가격 (0) | 2021.04.06 |
[프로그래머스/Javascript/Queue] 다리를 지나는 트럭 (0) | 2021.04.05 |
[프로그래머스/Javascript/Heap] 이중우선순위큐 (0) | 2021.04.04 |
[프로그래머스/Javascript/Heap] 디스크 컨트롤러 (0) | 2021.04.04 |