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 |
Tags
- DP
- 싸피
- 개발자스터디
- 백트래킹
- 프로그래머스
- dfs
- 99클럽
- 알고리즘
- SSAFY수료식
- 백준
- 문자열
- programmers
- til
- 삼성청년SW아카데미
- ssafy
- BFS
- java
- 구현
- 항해
- 코딩테스트
- BOJ
- 위상정렬
- python
- 자바
- 브루트포스
- 다이나믹프로그래밍
- 파이썬
- 너비우선탐색
- 99일지
- 깊이우선탐색
Archives
- Today
- Total
EunJng
[BOJ] 14698 전생했더니 슬라임 연구자였던 건에 대하여 (Hard) | Python 본문
문제
백준 14698번 전생했더니 슬라임 연구자였던 건에 대하여 (Hard) | 골드4
https://www.acmicpc.net/problem/14698
14698번: 전생했더니 슬라임 연구자였던 건에 대하여 (Hard)
각 테스트 케이스마다 슬라임을 끝까지 합성했을 때 청구될 비용의 최솟값을 1, 000, 000, 007로 나눈 나머지를 출력한다. 전기 에너지가 전혀 필요하지 않은 경우엔 1 을 출력한다.
www.acmicpc.net
- 알고리즘 분류 : 자료 구조 | 그리디 알고리즘 | 우선순위 큐
풀이 과정
파이썬 풀이
import sys
input = sys.stdin.readline
import heapq
T = int(input())
for tc in range(T):
N = int(input())
nums = list(map(int, input().split()))
if N == 1:
print(1)
continue
result = 1
hq = []
for n in nums:
heapq.heappush(hq, n)
while True:
if len(hq) == 1:
break
# 작은 값 두 개 pop해서 곱한 뒤 다시 추가
energy = heapq.heappop(hq)*heapq.heappop(hq)
result *= energy
heapq.heappush(hq, energy)
print(result % 1000000007)
- 우선순위 큐를 사용하여 작은 값 두 개를 heappop하여 곱한 뒤 다시 heappush한다.
- hq의 길이가 1이 된다면 슬라임이 모두 합성되어 1마리가 된 것이므로 종료한다.
- 또한 N이 1이라면 전기 에너지가 필요하지 않으므로 1을 출력하고 continue
- 우선순위 큐 문제가 오랜만이라 힘들었는데, 우선순위 큐에 대해 잘 안 다면 그렇게 어렵지는 않은 문제같다.
'PROBLEM > BAEKJOON' 카테고리의 다른 글
[BOJ] 2941 크로아티아 알파벳 | Java | Python (1) | 2023.05.13 |
---|---|
[BOJ] 10026 적록색약 | Python (1) | 2023.05.13 |
[BOJ] 7569 토마토 | Python (1) | 2023.05.11 |
[BOJ] 25206 너의 평점은 | Java (1) | 2023.05.10 |
[BOJ] 3673 나눌 수 있는 부분 수열 | Python | Java (1) | 2023.05.10 |