๐ ๋ฌธ์
์ ๋ ฌ๋ ๋ ๋ฌถ์์ ์ซ์ ์นด๋๊ฐ ์๋ค๊ณ ํ์. ๊ฐ ๋ฌถ์์ ์นด๋์ ์๋ฅผ A, B๋ผ ํ๋ฉด ๋ณดํต ๋ ๋ฌถ์์ ํฉ์ณ์ ํ๋๋ก ๋ง๋๋ ๋ฐ์๋ A+B ๋ฒ์ ๋น๊ต๋ฅผ ํด์ผ ํ๋ค. ์ด๋ฅผํ ๋ฉด, 20์ฅ์ ์ซ์ ์นด๋ ๋ฌถ์๊ณผ 30์ฅ์ ์ซ์ ์นด๋ ๋ฌถ์์ ํฉ์น๋ ค๋ฉด 50๋ฒ์ ๋น๊ต๊ฐ ํ์ํ๋ค.
๋งค์ฐ ๋ง์ ์ซ์ ์นด๋ ๋ฌถ์์ด ์ฑ ์ ์์ ๋์ฌ ์๋ค. ์ด๋ค์ ๋ ๋ฌถ์์ฉ ๊ณจ๋ผ ์๋ก ํฉ์ณ๋๊ฐ๋ค๋ฉด, ๊ณ ๋ฅด๋ ์์์ ๋ฐ๋ผ์ ๋น๊ต ํ์๊ฐ ๋งค์ฐ ๋ฌ๋ผ์ง๋ค. ์๋ฅผ ๋ค์ด 10์ฅ, 20์ฅ, 40์ฅ์ ๋ฌถ์์ด ์๋ค๋ฉด 10์ฅ๊ณผ 20์ฅ์ ํฉ์น ๋ค, ํฉ์น 30์ฅ ๋ฌถ์๊ณผ 40์ฅ์ ํฉ์น๋ค๋ฉด (10 + 20) + (30 + 40) = 100๋ฒ์ ๋น๊ต๊ฐ ํ์ํ๋ค. ๊ทธ๋ฌ๋ 10์ฅ๊ณผ 40์ฅ์ ํฉ์น ๋ค, ํฉ์น 50์ฅ ๋ฌถ์๊ณผ 20์ฅ์ ํฉ์น๋ค๋ฉด (10 + 40) + (50 + 20) = 120 ๋ฒ์ ๋น๊ต๊ฐ ํ์ํ๋ฏ๋ก ๋ ํจ์จ์ ์ธ ๋ฐฉ๋ฒ์ด๋ค.
N๊ฐ์ ์ซ์ ์นด๋ ๋ฌถ์์ ๊ฐ๊ฐ์ ํฌ๊ธฐ๊ฐ ์ฃผ์ด์ง ๋, ์ต์ํ ๋ช ๋ฒ์ ๋น๊ต๊ฐ ํ์ํ์ง๋ฅผ ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
๐์ ๋ ฅ
์ฒซ์งธ ์ค์ N์ด ์ฃผ์ด์ง๋ค. (1 ≤ N ≤ 100,000) ์ด์ด์ N๊ฐ์ ์ค์ ๊ฑธ์ณ ์ซ์ ์นด๋ ๋ฌถ์์ ๊ฐ๊ฐ์ ํฌ๊ธฐ๊ฐ ์ฃผ์ด์ง๋ค. ์ซ์ ์นด๋ ๋ฌถ์์ ํฌ๊ธฐ๋ 1,000๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์ ์์ ์ ์์ด๋ค.
๐์ถ๋ ฅ
์ฒซ์งธ ์ค์ ์ต์ ๋น๊ต ํ์๋ฅผ ์ถ๋ ฅํ๋ค.
๐ ๋ฌธ์ ํด์
๋น๊ต ํ์๋ฅผ ์ต์๋ก ๋ง๋ค๋ ค๋ฉด ์์ ๊ฐ๋ค์ ๋จผ์ ๋น๊ตํ๊ณ ํฐ ๊ฐ๋ค์ ๋์ค์ ๋น๊ตํด์ผ ํ๋ค. ์ฆ ์ ๋ ฌ๋ ๋ฐ์ดํฐ๋ฅผ ๋น๊ตํด์ผ๋ง ์ต์ ๋น๊ต ํ์๋ฅผ ๊ตฌํ ์ ์๋ค.
๊ทธ๋ ๋ค๋ฉด ๋ฐ์ดํฐ๋ฅผ ์ ๋ถ ์ ๋ ฅ ๋ฐ์ ๋ค์ ํ๋ฒ๋ง ์ ๋ ฌํ๊ณ , ๋ฐ์ดํฐ ๋น๊ต๋ฅผ ์์ํ๋ฉด ๋ ๊น?
๋ต์ NO! ์ด๋ค.
์๋ ์์๋ฅผ ์ดํด๋ณด์.
์ ๋ ฌ๋ ๋ฐ์ดํฐ 20, 30, 40, 45 ๊ฐ ์๋ค.
20 + 30 => 50
50 + 40 => 90
90 + 45 => 135
์ด ๋น๊ต ํ์๋ 50 + 90 + 135 = 275 ๋ฒ์ด๋ค.
์ ์์ ๋ณด๋ฉด ๊ฐ์ฅ ์์ ๋ฐ์ดํฐ๋ค์ ๋จผ์ ๋น๊ตํ๋ค๊ณ ํ์๋๋ฐ, 40 + 45๋ฅผ ๋จผ์ ๋น๊ตํ ๊ฒ์ด ์๋๋ผ ํ๋ฒ ๋น๊ตํ ์ฐ์ฐ๊ฐ์ธ 50 + 40์ ๋จผ์ ๋น๊ตํ๊ฒ ๋์๋ค.
์ด๋ ๊ฒ ์ ์ผ ์ฒ์ ํ๋ฒ๋ง ์ ๋ ฌํ๊ณ ๋ฐ์ดํฐ ๋ํ๊ธฐ ์์ํ๋ฉด ์ค๊ฐ์ ์ฐ์ฐ๊ฐ์ ์ ๋ ฌ๋์ง ์์ ์ํ์์ ๋ํด์ง๊ธฐ ๋๋ฌธ์ ๊ฐ์ ์ ์ถํ ์๊ฐ ์๋ค. ๊ทธ๋ ๋ค๊ณ ํ๋ฒ ํ ๋๋ง๋ค ์ ๋ ฌ์ ํด์ฃผ๊ฒ ๋๋ค๋ฉด ์๊ฐ์ด๊ณผ๊ฐ ๋ ๊ฒ์ด๋ค.
๊ทธ๋์ ํด๋น ๋ฌธ์ ๋ !!!์ฐ์ ์์ ํ!!!๋ฅผ ์ฌ์ฉํด์ ํ์ด์ผ ํ๋ค. ์ฐ์ ์์ ํ๋ ๋ก๊ทธ์๊ฐ๋์ ์๊ฐ๋ณต์ก๋๋ก ๋ฐ์ดํฐ์ ์ฝ์ ์ญ์ ๊ฐ ๊ฐ๋ฅํ๊ธฐ ๋๋ฌธ์ ์๊ฐ์ด๊ณผ ํ์ ์ ๋ฐ์ง ์๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ต์ํ ๊ธฐ๋ฐ์ธ ์๋ฃ๊ตฌ์กฐ์ด๊ธฐ ๋๋ฌธ์ ๋ฐ๋ก ์ ๋ ฌํด์ค ํ์๊ฐ ์๋ค.
๐ป ์ฝ๋
import heaqp
n = int(input())
card = list(int(input()) for _ in range(n)) # ๋ฐ์ดํฐ ์
๋ ฅ๋ฐ์
heapq.heapify(card) # ๋ฆฌ์คํธ๋ฅผ ํ๊ตฌ์กฐ๋ก ๋ฐ๊ฟ์ฃผ๋ ํจ์
ans = 0
while len(card) != 1: # n=1๋ผ๋ฉด ans = 0์ ๋น๊ต๊ฐ ํ์์๋ค.
first = heapq.heappop(card)
second = heapq.heappop(card)
res = first + second # ๊ฐ์ฅ ์์๊ฑฐ ๋๊ฐ ๊บผ๋ด์ ๋ํ ๋ค์
ans += res
heapq.heappush(card, res) # ๋ค์ ๋ฃ์
print(ans)
๐ ๋ฌธ์ ๋งํฌ ์นด๋ ์ ๋ ฌํ๊ธฐ
'Problem Solving > ๋ฐฑ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค] 11688๋ฒ: ์ต์๊ณต๋ฐฐ์ ์ฐพ๊ธฐ - ํ์ด์ฌ (0) | 2022.07.11 |
---|---|
[๋ฐฑ์ค] 25432๋ฒ: ์ต๋ ์ต์๊ณต๋ฐฐ์ - ํ์ด์ฌ (0) | 2022.07.09 |
[๋ฐฑ์ค] 9375๋ฒ: ํจ์ ์ ์ ํด๋น - ํ์ด์ฌ (0) | 2022.07.07 |
[๋ฐฑ์ค] 13140๋ฒ: Hello World! - ํ์ด์ฌ (0) | 2022.06.27 |
[๋ฐฑ์ค] 17451๋ฒ: ํํ ์ฐ์ฃผ - ํ์ด์ฌ (0) | 2022.06.26 |