알고리즘/백준

[파이썬] BOJ_15903(카드 합체 놀이)

딱따구르리 2021. 2. 17. 16:45
728x90
반응형

문제

 

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

 

15903번: 카드 합체 놀이

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

www.acmicpc.net


 

해설

 

이 문제는 다음과 같은 2가지 과정을 통해 카드 합체를 하는 문제이다.

 

  1. x번 카드와 y번 카드를 골라 그 두 장에 쓰여진 수를 더한 값을 계산한다. (x ≠ y)
  2. 계산한 값을 x번 카드와 y번 카드 두 장 모두에 덮어 쓴다.

위와 같은 과정을 m번 거쳤을 때 모든 카드의 합이 최소가 되게 하는 것이 목표이므로,

매번 고르는 x번 카드와 y번 카드는 가장 작은 두 카드가 되야한다.

 

sort() 함수를 이용해 반복문이 시작할 때 마다, 오름차순 정렬을 해주면

리스트의 0번, 1번 카드가 매번 가장 작은 두 카드가 된다.

두 카드의 값을 더해 새로운 변수(temp)에 넣어주고

두 카드를 temp 값으로 변경해주면 1, 2번 과정을 모두 거치게 된다.

 

반복문이 종료되고 나면 리스트에 있는 값을 모두 더해주면 된다.


코드

 

-파이썬

#백준 15903(카드 합체 놀이)

n, m = map(int, input().split())  #카드 개수, 합체 횟수
card = list(map(int, input().split()))  #카드

for i in range(m):
    card.sort()

    temp = card[0] + card[1]
    card[0] = temp
    card[1] = temp

print(sum(card))
728x90
반응형