We will find a way, we always have.

-interstellar

Problem Solving/๋ฐฑ์ค€

[๋ฐฑ์ค€] 1715๋ฒˆ: ์นด๋“œ ์ •๋ ฌํ•˜๊ธฐ - ํŒŒ์ด์ฌ

Redddy 2022. 7. 8. 12:51

๐Ÿ”ˆ ๋ฌธ์ œ

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

 

๐Ÿ”— ๋ฌธ์ œ๋งํฌ ์นด๋“œ ์ •๋ ฌํ•˜๊ธฐ

 

1715๋ฒˆ: ์นด๋“œ ์ •๋ ฌํ•˜๊ธฐ

์ •๋ ฌ๋œ ๋‘ ๋ฌถ์Œ์˜ ์ˆซ์ž ์นด๋“œ๊ฐ€ ์žˆ๋‹ค๊ณ  ํ•˜์ž. ๊ฐ ๋ฌถ์Œ์˜ ์นด๋“œ์˜ ์ˆ˜๋ฅผ A, B๋ผ ํ•˜๋ฉด ๋ณดํ†ต ๋‘ ๋ฌถ์Œ์„ ํ•ฉ์ณ์„œ ํ•˜๋‚˜๋กœ ๋งŒ๋“œ๋Š” ๋ฐ์—๋Š” A+B ๋ฒˆ์˜ ๋น„๊ต๋ฅผ ํ•ด์•ผ ํ•œ๋‹ค. ์ด๋ฅผํ…Œ๋ฉด, 20์žฅ์˜ ์ˆซ์ž ์นด๋“œ ๋ฌถ์Œ๊ณผ 30์žฅ

www.acmicpc.net

 

 

์นด๋“œ