1. 문제정보
https://www.acmicpc.net/problem/1715
1715번: 카드 정렬하기
정렬된 두 묶음의 숫자 카드가 있다고 하자. 각 묶음의 카드의 수를 A, B라 하면 보통 두 묶음을 합쳐서 하나로 만드는 데에는 A+B 번의 비교를 해야 한다. 이를테면, 20장의 숫자 카드 묶음과 30장
www.acmicpc.net
2. 해결전략
처음 생각했던 전략은 리스트를 오름차순으로 정렬하고 합계를 더해가는 방식으로 구현했습니다. 입력 횟수가 최대 10만번 이기 때문에 입력 시간을 줄이기 위해 readline을 사용했지만 리스트를 이용한 방법은 연산 횟수가 최대 10만x10만으로 시간 초과를 받았습니다. 결국 우선순위큐에 대한 힌트를 확인한 후 우선순위큐로 구현하였습니다.
3. 코드
import sys
from queue import PriorityQueue
input = sys.stdin.readline
n = int(input())
q = PriorityQueue()
for _ in range(n):
card = int(input())
q.put(card)
result = 0
if q.qsize() == 1:
print(0)
else:
while q.qsize() >= 2:
n1 = q.get()
n2 = q.get()
result += (n1+n2)
q.put(n1+n2)
print(result)
'기타 > 코딩테스트' 카테고리의 다른 글
[Python] 백준 1002번 - 터렛 (0) | 2023.04.12 |
---|---|
[Python] 백준 1026번 - 보물 (0) | 2023.04.12 |
[Python] 백준 13549번 - 숨바꼭질 (0) | 2023.03.31 |
[Python]백준 1753번 - 최단경로 (0) | 2023.03.28 |
[Python] 백준 1238번 - 파티 (0) | 2023.03.28 |