[Python] ๋ฐฑ์ค 15903๋ฒ ์นด๋ ํฉ์ฒด ๋์ด
https://www.acmicpc.net/problem/15903
15903๋ฒ: ์นด๋ ํฉ์ฒด ๋์ด
์ฒซ ๋ฒ์งธ ์ค์ ์นด๋์ ๊ฐ์๋ฅผ ๋ํ๋ด๋ ์ n(2 ≤ n ≤ 1,000)๊ณผ ์นด๋ ํฉ์ฒด๋ฅผ ๋ช ๋ฒ ํ๋์ง๋ฅผ ๋ํ๋ด๋ ์ m(0 ≤ m ≤ 15×n)์ด ์ฃผ์ด์ง๋ค. ๋ ๋ฒ์งธ ์ค์ ๋งจ ์ฒ์ ์นด๋์ ์ํ๋ฅผ ๋ํ๋ด๋ n๊ฐ์ ์์ฐ์ a1,
www.acmicpc.net
| ๋ฌธ์ ๋ด์ฉ
n๊ฐ์ ์ซ์ ์นด๋ ์ค ๊ฐ์ฅ ์์ ์ ๋๊ฐ๋ฅผ ๋ํด์ ๊ฐ๊ฐ ๋ฎ์ด ์์ฐ๋ ํ๋์ m ๋ฒ ๋ฐ๋ณตํ์ ๋ ์ ์ฒด ์ซ์ ์นด๋์ ํฉ๊ณ๊ฐ ์ต์์ธ ๊ฐ ๊ตฌํ๊ธฐ
| ํ์ด
๋ํ๊ธฐ ์ ๋งค๋ฒ ์ ๋ ฌ์ ํตํด ๊ฐ์ฅ ์์ ์ 2๊ฐ๋ฅผ ์ ํ ์๋ ์์ง๋ง ์ด ๋ฐฉ๋ฒ์ O(n)์ ์๊ฐ๋ณต์ก๋๊ฐ ์์๋จ.
๋ฐฐ์ด ์ ๋ ฌ๋์ ์ฐ์ ์์ํ๋ฅผ ์ฌ์ฉํ๋ฉด O(logn)์ ์๊ฐ์ผ๋ก ์์ ์๋ฅผ ๊ตฌํ ์ ์์.
import sys, heapq
input = sys.stdin.readline
n, m = map(int, input().split())
num_list = list(map(int, input().split()))
# ์ฐ์ ์์ํ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ ์๋ ์ธก๋ฉด์์ ์ข์
heapq.heapify(num_list) # ๋ฆฌ์คํธ๋ฅผ ํ์ผ๋ก ๋ณ๊ฒฝ
for i in range(m):
x = heapq.heappop(num_list)
y = heapq.heappop(num_list)
heapq.heappush(num_list, x + y)
heapq.heappush(num_list, x + y)
print(sum(num_list))
| ๋๋์
๋ฌด์์ ํ์ง๋ง๊ณ ํจ์จ์ ์ธ ๊ตฌ์กฐ๋ฅผ ๋จผ์ ์๊ฐํ๊ณ ํ์