티스토리 뷰
https://www.acmicpc.net/problem/15903
15903번: 카드 합체 놀이
첫 번째 줄에 카드의 개수를 나타내는 수 n(2 ≤ n ≤ 1,000)과 카드 합체를 몇 번 하는지를 나타내는 수 m(0 ≤ m ≤ 15×n)이 주어진다. 두 번째 줄에 맨 처음 카드의 상태를 나타내는 n개의 자연수 a1,
www.acmicpc.net
1. 접근 방식
- 최소 힙을 사용하자.
카드 합체 놀이의 점수를 가장 작게 만드는 것이 놀이의 목표이다. x번 카드와 y번 카드를 고를 때, 그 두 장에 써진 수가 작을수록 그 둘의 합도 작아지기 때문에 모든 카드의 수를 더한 점수도 작아진다.
따라서 수가 가장 작은 카드를 2장 뽑기 위해 최소 힙을 사용한다.
- 문제 명세대로 구현하자.
문제에 카드 합체 놀이 과정이 자세히 작성되어 있으므로, 그대로 구현하자.
cards 최소 힙으로 카드 2장을 뽑고, 그 수를 더한 결과를 다시 cards에 2번 넣어주면 된다.
2. 정답 코드
from heapq import heapify, heappop, heappush
n, m = map(int, input().split())
cards = list(map(int, input().split()))
heapify(cards)
for _ in range(m) :
x = heappop(cards)
y = heappop(cards)
heappush(cards, x + y)
heappush(cards, x + y)
print(sum(cards))
728x90
'코딩 테스트 > 백준' 카테고리의 다른 글
[백준] 20056번 마법사 상어와 파이어볼 파이썬 풀이 (+ 새 정답 코드 추가) (0) | 2023.08.11 |
---|---|
[백준] 2805번 나무 자르기 파이썬 풀이 (0) | 2023.08.09 |
[백준] 11286번 절댓값 힙 파이썬 정답 코드 (0) | 2023.08.08 |
[백준] 1927 최소 힙 파이썬 정답 코드 (0) | 2023.08.08 |
[백준] 11279번 최대 힙 파이썬 정답 코드 (0) | 2023.08.08 |