https://www.acmicpc.net/problem/1715
1715번: 카드 정렬하기
정렬된 두 묶음의 숫자 카드가 있다고 하자. 각 묶음의 카드의 수를 A, B라 하면 보통 두 묶음을 합쳐서 하나로 만드는 데에는 A+B 번의 비교를 해야 한다. 이를테면, 20장의 숫자 카드 묶음과 30장
www.acmicpc.net
문제 접근
문제를 이해하는데만 1시간이 넘게 걸렸다. 잘못 생각해서 고생좀 했다..ㅜㅜ
예제에서 10 20 40을 입력받으면 (10+20) + (10+20+40) 으로 100이 나온다.
추가 예시로 올려준것도 찾아봤다.
https://www.acmicpc.net/board/view/72799
30 40 50 100이 입력으로 주어진다.
처음엔 순서대로 더하면 되는줄 알고 (30+40) + (30+40+50) + (30+40+50+100)을 하면 410이 나온다.
이방식을 구현하려고 힙을 사용했다.
최소힙을 구현을 했고, 최소힙에 값을 2개 꺼내서 ans에 추가를 해주고, 더한 값을 다시 힙에 넣어준다.
그러면 10 11 12 13 같이 입력을 받는경우도 쉽게 해결이 된다.
최소값부터 순서대로 더한다면 10+11을 하고 21+12, 34+13 순으로 되지만
이런 계산방법 보단 10+11, 12+13 -> 21+25 가 더 적기떄문이다.
코드
import heapq
import sys
input = sys.stdin.readline
"""
"""
N = int(input())
heap = []
for _ in range(N):
heapq.heappush(heap, int(input()))
ans = 0
while len(heap)>1:
x = heapq.heappop(heap)
y = heapq.heappop(heap)
ans += x + y
heapq.heappush(heap, x + y)
print(ans)
'백준 > 문제풀이_python' 카테고리의 다른 글
1931 회의실 배정 _python (0) | 2022.12.06 |
---|---|
1620 나는야 포켓몬 마스터 이다솜 _python (0) | 2022.12.06 |
11279 최대 힙 _python (0) | 2022.12.06 |
1927 최소 힙 _python (0) | 2022.12.06 |
1389 케빈 베이컨의 6단계 법칙 _python (0) | 2022.12.05 |
댓글