전공/백준
15903
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)이었기 때문에 문제가 해결된 듯 하다.
참고 사이트
-