본문 바로가기

백준 파이썬 코딩

백준 15903 카드 합체 놀이 파이썬

https://www.acmicpc.net/problem/15903

 

15903번: 카드 합체 놀이

첫 번째 줄에 카드의 개수를 나타내는 수 n(2 ≤ n ≤ 1,000)과 카드 합체를 몇 번 하는지를 나타내는 수 m(0 ≤ m ≤ 15×n)이 주어진다. 두 번째 줄에 맨 처음 카드의 상태를 나타내는 n개의 자연수 a1,

www.acmicpc.net

기본적인 heap사용법만 알면 크게 어려운 문제는 아니였다.

list를 입력 받으면 가장 작은 수를 빼고  2개를 더한 뒤 더한 수를 다시 list에 넣어주면 된다.

그래서 난 가장 작은 수 2개를 빼기 위헤 heap을 사용했다.

import heapq
n,t= map(int,input().split())
heap = list(map(int,input().split()))
heapq.heapify(heap)#list->heap
for _ in range(t):
    a = heapq.heappop(heap)#제일 작은 수 뺌
    b = heapq.heappop(heap)# 그 다음 제일 작은 수 뺌
    heapq.heappush(heap,a+b)#다시 heap에 넣어줌
    heapq.heappush(heap,a+b)#다시 heap에 넣어줌
print(sum(heap))#모든 수를 더한 값을 출력해줌