[BOJ]백준#15903 Silver 2 카드합체놀이☪✡ (Python, 파이썬)

임준성·2022년 5월 26일
0

백준 Algorithm

목록 보기
18/59
post-thumbnail

백준 15903번
https://www.acmicpc.net/problem/15903


문제



후기

⏰ 풀이시간 30분 ++⏰

카드를 리스트로 받은 후 우선 오름차순으로 정렬한다.

점수를 가장 작게 만드려면, 가장 작은 수 두 장을 합치는 것이 당연히 값이 가장 작게

나올 것이라 생각했다.

작은 카드 두장을 합치고, 그 카드 두장의 합을 다시 합치기전의 두 카드에 넣는다.

그 후에 카드를 정렬하는 과정을 M번 만큼 반복한다.

이렇게 반복하고 나서 만들어진 카드들의 list의 sum을 구하면 되는 비교적 간단한 문제다.

문제의 힌트에는 우선순위 큐를 사용하면 풀 수 있게 되어있지만, 익숙한 방법으로 쉽게 해결할 수

있었기에 아래와 같은 코드를 사용하였다.

나의 풀이

import sys

input = sys.stdin.readline

N , M = map(int,input().split()) # N은 카드개수 M은 합체횟수

# x번 카드와 y번 카드를 골라 그 두 장에 쓰여진 수를 더한 값을 계산한다. (x ≠ y)
# 계산한 값을 x번 카드와 y번 카드 두 장 모두에 덮어 쓴다.
# 점수를 가장 작게 만든다. M번 놀이 한 이후

card = sorted(list(map(int,input().split()))) # 카드 상태

cnt = 0 # M번이 될때까지 while문 반복예정 

while cnt != M:

    card_sum = 0  #제일 작은 카드 두장을 합칠 값 
     
    card.sort()

    card_sum += card[0] + card[1]

    card[0] = card_sum
    card[1] = card_sum

    cnt +=1

print(sum(card))
profile
아무띵크 있이

0개의 댓글