https://www.acmicpc.net/problem/1715
1715번: 카드 정렬하기
정렬된 두 묶음의 숫자 카드가 있다고 하자. 각 묶음의 카드의 수를 A, B라 하면 보통 두 묶음을 합쳐서 하나로 만드는 데에는 A+B 번의 비교를 해야 한다. 이를테면, 20장의 숫자 카드 묶음과 30장
www.acmicpc.net
카드 정렬하기 문제다.
내가 처음에 문제에 접근할 때는 그냥 카드 뭉치들을 정렬해주고 dp를 사용해서 작은 순서대로 카드를 더해가는 방법으로 했다. 그런데 그냥 더해가면 되는것이 아니라 그 합한 카드뭉치까지 다른 카드뭉치와 비교해서 작은순으로 비교해가야만 했다. 그래서 dp를 사용하지 않고 우선순의 queue를 사용해서 문제를 해결했다.
소스코드
import sys
import heapq
data = []
ans = 0
N = int(input())
for i in range(N):
a = int(sys.stdin.readline())
heapq.heappush(data, a)
ans = 0
for i in range(N - 1):
a = heapq.heappop(data)
b = heapq.heappop(data)
ans += a + b
heapq.heappush(data, a + b)
print(ans)
'알고리즘 > python' 카테고리의 다른 글
| 2667번 단지번호붙이기(python3) (0) | 2022.01.29 |
|---|---|
| 18405번 경쟁적 전염(python3) (0) | 2022.01.27 |
| 1316번 그룹 단어 체커(python3) (0) | 2022.01.25 |
| 이.코.테 바닥공사, 효율적인 화폐 구성(python3) (0) | 2022.01.25 |
| 이.코.테 1로 만들기, 개미 전사(python3) (0) | 2022.01.24 |