코딩 테스트(Python)/백준, 프로그래머스
1715 카드정렬하기(heap 활용)
5_hyun
2022. 1. 18. 00:17
반응형
https://www.acmicpc.net/problem/1715
1715번: 카드 정렬하기
정렬된 두 묶음의 숫자 카드가 있다고 하자. 각 묶음의 카드의 수를 A, B라 하면 보통 두 묶음을 합쳐서 하나로 만드는 데에는 A+B 번의 비교를 해야 한다. 이를테면, 20장의 숫자 카드 묶음과 30장
www.acmicpc.net
내가 푼 풀이(맞음)
import heapq
n = int(input())
heap = []
for i in range(n):
x = int(input())
heapq.heappush(heap, x)
result = 0
while(len(heap) != 1):
sum = 0
a = heap[0]
heapq.heappop(heap)
a += heap[0]
heapq.heappop(heap)
sum += a
result += sum
heapq.heappush(heap, sum)
print(result)
처음에 heap 안쓰고 list로 푸니까 시간 초과 떴었음, 그래서 heap으로 풀라는 힌트 살짝 보고 풀음
heap 쓸려면 import heapq 써야된다. 그리고 힙에 추가하려면 heapq.heappush(리스트 이름, 값)으로 한다.
그리고 힙의 0번째를 호출하면 무조건 최소값이 나온다. 하지만 1번째 자리가 그 다음으로 작은 값은 아니다. 그래서 heapq.heappop(리스트 이름)을 하면 가장 최소값이 삭제된다. 가장 최소값을 삭제하고 그 다음 최소값을 찾는다.
반응형