yha97 2022. 11. 11. 17:40

날짜 : 2022. 11. 11

사용 언어 : python

 

문제

 

 

코드

import sys
n, m = map(int, sys.stdin.readline().split()) # 카드 개수, 합체 횟수
a = list(map(int, sys.stdin.readline().split()))
a.sort()
for i in range(m):
    t = a[0] + a[1]
    a[0] = t
    a[1] = t
    a.sort()
s = 0
for i in range(n): s += a[i]
print(s)

 

 

풀이

- 먼저 카드를 입력받고 오름차순으로 정렬

- 이후에 가장 작은 두 수를 합한 후 그 수를 지정한 다음 또 정렬하는 방식을 m회 반복한다.

- 그 이후 합을 출력

 

 

알게된 점

- 시간복잡도가 걸려서 시간초과가 나올 줄 알았는데 의외로 한번에 풀려서 당황했다.

- 찾아보니 리스트의 sort() 시간복잡도는 O(N * logN)이었기 때문에 문제가 해결된 듯 하다.

 

 

참고 사이트