BOJ

1715 : 카드 정렬하기

minju26 2023. 2. 20. 23:40

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

 

1715번: 카드 정렬하기

정렬된 두 묶음의 숫자 카드가 있다고 하자. 각 묶음의 카드의 수를 A, B라 하면 보통 두 묶음을 합쳐서 하나로 만드는 데에는 A+B 번의 비교를 해야 한다. 이를테면, 20장의 숫자 카드 묶음과 30장

www.acmicpc.net

 

이 문제는 풀이 방법을 생각하는 것은 간단했다.

그냥.. 작은것들 먼저 더해주고 그 결과를 또 더해주면 된다!

 

먼저 입력으로 받은 카드를 리스트에 넣고 오름차순으로 정렬했다.

 

카드가 한 묶음만 입력으로 주어진다면 비교 할 필요가 없으므로 0을 프린트하도록 예외처리를 해두고,

 

다른 경우에 대해서는 정렬된 카드 리스트의 첫 번째, 두 번째 인덱스를 더한다.

그리고 그 결과는 결과 리스트에 저장하고 또, 카드 리스트에도 넣고 카드 리스트는 다시 정렬한다.

 

마지막으로 결과 리스트에 들어있는 값을 모두 더해서 출력한다.

 

import sys

n = int(sys.stdin.readline())
card_list = []
result_list = []
result = 0
cnt = 0

for _ in range(n):
    card = int(sys.stdin.readline())
    card_list.append(card)

card_list.sort()

if len(card_list) == 1:
    print(0)
else:
    while len(card_list) != 1:
        cnt = card_list[0] + card_list[1]
        card_list.remove(card_list[0])
        card_list.remove(card_list[0])
        card_list.append(cnt)
        result_list.append(cnt)
        card_list.sort()

    print(sum(result_list))

 

근데 시간초과로 실패했다..ㅎ

 

보니까 다들 heapq를 썼더라...

다시 풀어봐야겠다.

'BOJ' 카테고리의 다른 글

2178 : 미로 탐색  (0) 2023.03.11
1781 : 컵라면  (0) 2023.02.27
1092 : 배  (0) 2023.02.20
11000 : 강의실 배정  (1) 2023.02.13
1461 : 도서관  (1) 2023.02.13