alpyrithm_알파이리즘

[알고리즘][Python] 백준(BOJ) 15903 카드 합체 놀이_파이썬 본문

Algorithm/백준 알고리즘_Python

[알고리즘][Python] 백준(BOJ) 15903 카드 합체 놀이_파이썬

알파이 2020. 11. 22. 08:14

 

15903 카드 합체 놀이    www.acmicpc.net/problem/15903

 

15903번: 카드 합체 놀이

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

www.acmicpc.net

 

 

문제 풀기 전 공부할 것 : 자료 구조, 그리디 알고리즘, 우선순위 큐

 

 

 

 

 

 

 

풀이

<내용>

  • 우선순위 큐를 이용해서 해결한다.
  • 우선순위 큐를 이용해서 카드들을 넣는다.
  • 우선순위 큐를 이용해서 가장 작은 2개 카드를 꺼내서 더하고 2번 넣어준다.
  • 위의 과정을 m번 반복하고 총합을 출력한다.

 

 

<코드>

import heapq

n, m = map(int, input().split())
cards = list(map(int, input().split()))
heap = []
for card in cards:
    heapq.heappush(heap, card)
    
for _ in range(m):
    x = heapq.heappop(heap)
    y = heapq.heappop(heap)
    heapq.heappush(heap, x+y)
    heapq.heappush(heap, x+y)
    
print(sum(heap))

 

 

 

 

 

 

 

 

 

 

728x90
반응형
Comments