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 |