๐Ÿ‘ฉ๐Ÿป‍๐Ÿ’ป ์•Œ๊ณ ๋ฆฌ์ฆ˜/๋ฐฑ์ค€

[๋ฐฑ์ค€] 1715๋ฒˆ ์นด๋“œ ์ •๋ ฌํ•˜๊ธฐ (Python)

mallin 2024. 7. 24. 17:09

https://www.acmicpc.net/problem/1715

๐Ÿ“Œ ๋ฌธ์ œ

์ •๋ ฌ๋œ ๋‘ ๋ฌถ์Œ์˜ ์ˆซ์ž ์นด๋“œ๊ฐ€ ์žˆ๋‹ค๊ณ  ํ•˜์ž. ๊ฐ ๋ฌถ์Œ์˜ ์นด๋“œ์˜ ์ˆ˜๋ฅผ 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๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์€ ์–‘์˜ ์ •์ˆ˜์ด๋‹ค.

 

 

๐Ÿ“Œ ์ถœ๋ ฅ

์ฒซ์งธ ์ค„์— ์ตœ์†Œ ๋น„๊ต ํšŸ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.

 

 


๐Ÿ“Œ ํ’€์ด ๋ฐฉ์‹ 

๊ฐ€์žฅ ์ž‘์€ ๋‘๊ฐœ์˜ ์นด๋“œ๋ฅผ ๊ฐ€์ ธ์™€์„œ ๋”ํ•ด์ฃผ๋ฉด ๋˜๋Š” ๊ฐ„๋‹จํ•œ ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค.

 

N = 4 ์ด๊ณ  ์นด๋“œ๊ฐ€ 30 / 40 / 50 / 100 ์ผ ๋•Œ 

 

(1) 30 + 40 = 70          [์นด๋“œ ๋ฌถ์Œ = 70 / 50 / 100]

(2) 50 + 70 = 120        [์นด๋“œ ๋ฌถ์Œ = 120 / 100]

(3) 100 + 120 = 220    [์นด๋“œ ๋ฌถ์Œ = 220]

 

๊ฐ€์žฅ ์ž‘์€ ๋‘๊ฐœ์˜ ์นด๋“œ๋“ค์„ ๊ฐ€์ ธ์™€์„œ ๋”ํ•ด์ฃผ๊ณ  ๋”ํ•œ ๊ฐ’์„ ๋‹ค์‹œ ์นด๋“œ ๋ฌถ์Œ์œผ๋กœ ๋„ฃ์–ด์ค๋‹ˆ๋‹ค. 

์œ„์˜ ์˜ˆ์‹œ๋ฅผ ํ†ตํ•ด ์•Œ ์ˆ˜ ์žˆ๋“ฏ N-1 ๋งŒํผ ๋ฐ˜๋ณตํ•ด์ฃผ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

 

๐Ÿ”‘ ํ‚คํฌ์ธํŠธ

๊ณผ์ • ์ž์ฒด๋Š” ์‰ฌ์šด๋ฐ ์™œ ๊ณจ๋“œ 4 ๋ฌธ์ œ์ผ๊นŒ์š” ?

๊ฐ€์žฅ ์ž‘์€ ๋‘ ๊ฐœ์˜ ์นด๋“œ๋ฅผ ์–ด๋–ป๊ฒŒ ๊ฐ€์ ธ์˜ค๋ƒ๊ฐ€ ๊ด€๊ฑด์ธ๋ฐ ๋งค ๋ฐ˜๋ณต๋งˆ๋‹ค ์ •๋ ฌ์„ ์‚ฌ์šฉํ•˜๋ฉด ์‹œ๊ฐ„์ดˆ๊ณผ๊ฐ€ ๋ฐœ์ƒํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ถ„๋ฅ˜์— ์‚ด์ง์ฟต ํžŒํŠธ๊ฐ€ ๋‚˜์™€ ์žˆ๋Š”๋ฐ ์‹œ๊ฐ„์ดˆ๊ณผ๋ฅผ ํ”ผํ•˜๊ธฐ ์œ„ํ•ด์„œ ์šฐ์„ ์ˆœ์œ„ ํ๋ฅผ ์‚ฌ์šฉํ•ด์ฃผ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

 


๐Ÿ“Œ ์ฝ”๋“œ

import heapq
n = int(input())

cards = []
[heapq.heappush(cards, int(input())) for _ in range(n)]

result = 0
for _ in range(n-1):
    sum = heapq.heappop(cards) + heapq.heappop(cards)
    heapq.heappush(cards, sum)
    result += sum

print(result)

 

ํŒŒ์ด์ฌ์—์„œ๋Š” heap ์„ ์‚ฌ์šฉํ•ด์„œ ์šฐ์„ ์ˆœ์œ„ํ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

PriorityQueue ๋ฅผ ์ œ๊ณตํ•˜๊ณ  ์žˆ์–ด์„œ ์ด๊ฑธ ์‚ฌ์šฉํ•  ์ˆ˜๋„ ์žˆ์ง€๋งŒ, ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋”ฉ ํ™˜๊ฒฝ๋„ ๊ณ ๋ คํ•˜๊ธฐ์— heap ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ๋ฉ”๋ชจ๋ฆฌ๋ž‘ ์‹œ๊ฐ„์„ ๋” ๋งŽ์ด ์‚ฌ์šฉํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ์ฝ”๋”ฉ ํ…Œ์ŠคํŠธ์—์„œ๋Š” heap ๋งŒ ์‚ฌ์šฉํ•ด๋„ ์ถฉ๋ถ„ํ•ฉ๋‹ˆ๋‹ค