์•Œ๊ณ ๋ฆฌ์ฆ˜/๋ฌธ์ œํ’€์ด

[Python] ๋ฐฑ์ค€ 15903๋ฒˆ ์นด๋“œ ํ•ฉ์ฒด ๋†€์ด

์–‘๋‚˜๋‹ˆ 2023. 4. 30. 17:13

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))

 

| ๋А๋‚€์ 

๋ฌด์ž‘์ • ํ’€์ง€๋ง๊ณ  ํšจ์œจ์ ์ธ ๊ตฌ์กฐ๋ฅผ ๋จผ์ € ์ƒ๊ฐํ•˜๊ณ  ํ’€์ž