내 근황 (TMI..)
꺄~ 싸피 공통 PJT를 잘 마무리하고 돌아왔다 ~~!!
마지막 열흘 정도는 PJT에 집중하느라고 PS를 못하다가 오랜만에 문제를 풀었다 !!
내가 좋아하는 heapq를 이용하면 되는 문제였다.
설명
카드 묶음 여러 개가 있는데, 두 묶음씩 골라서 합쳐나간다. 합칠 때는 그 두 묶음의 개수만큼 비교를 해야 한다. 최소 몇 번의 비교가 필요한가?
-> 적은 것부터 합치는 게 좋다 !!라는 걸 파악하고 heapq를 사용하면 됐다.
비교 개수를 담을 변수인 cnt를 0으로 초기화하고 시작했다.
q에 숫자 카드 묶음 각각의 크기를 넣었다. heapify를 이용해서 q를 우선순위 큐로 만들어줬다.
그리고 q의 크기가 1이 될 때까지, 가장 적은 것 두 개씩을 더해서 다시 heapq에 넣었다. 매번 그 적은 것 두 묶음의 개수를 더한 걸 cnt에 더했다.
=> 최종적으로 cnt를 출력하면 답이다.
코드 👩💻
import sys, heapq
input = sys.stdin.readline
N = int(input())
q = list(int(input()) for _ in range(N))
heapq.heapify(q)
cnt = 0
while len(q) > 1:
a = heapq.heappop(q)
b = heapq.heappop(q)
heapq.heappush(q, a + b)
cnt += (a + b)
print(cnt)
728x90
'즐거운 PS 👩💻🥰' 카테고리의 다른 글
[백준-파이썬] 17619: 개구리 점프 (0) | 2022.02.21 |
---|---|
[백준-파이썬] 21202: Conquest (0) | 2022.02.20 |
[백준-파이썬] 1405 : 미친 로봇 (0) | 2022.02.10 |
[백준-파이썬] 1719: 택배 (0) | 2022.02.09 |
[백준-파이썬] 14550: 마리오 파티 (0) | 2022.02.08 |