๊ด€๋ฆฌ ๋ฉ”๋‰ด

๐Ÿ’ป๐Ÿ’ญ๐ŸŽง๐ŸŒ

BOJ 1781 : ์ปต๋ผ๋ฉด (Python) ๋ณธ๋ฌธ

์•Œ๊ณ ๋ฆฌ์ฆ˜/๋ฐฑ์ค€ ํ’€์ด

BOJ 1781 : ์ปต๋ผ๋ฉด (Python)

adorableco 2023. 2. 28. 22:33
๋ฐ˜์‘ํ˜•

๋ฌธ์ œ

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

 

1781๋ฒˆ: ์ปต๋ผ๋ฉด

์ƒ์šฑ ์กฐ๊ต๋Š” ๋™ํ˜ธ์—๊ฒŒ N๊ฐœ์˜ ๋ฌธ์ œ๋ฅผ ์ฃผ๊ณ ์„œ, ๊ฐ๊ฐ์˜ ๋ฌธ์ œ๋ฅผ ํ’€์—ˆ์„ ๋•Œ ์ปต๋ผ๋ฉด์„ ๋ช‡ ๊ฐœ ์ค„ ๊ฒƒ์ธ์ง€ ์ œ์‹œ ํ•˜์˜€๋‹ค. ํ•˜์ง€๋งŒ ๋™ํ˜ธ์˜ ์ฐŒ๋ฅผ๋“ฏํ•œ ์ž์‹ ๊ฐ์— ์†Œ์‹ฌํ•œ ์ƒ์šฑ ์กฐ๊ต๋Š” ๊ฐ๊ฐ์˜ ๋ฌธ์ œ์— ๋Œ€ํ•ด ๋ฐ๋“œ๋ผ

www.acmicpc.net

 

 

์ฝ”๋“œ

import heapq
import sys
input = sys.stdin.readline
array = []

for _ in range(n):
    deadline, ramen = map(int, input().split())
    array.append((deadline, ramen))

array.sort()

queue = []

for i in array:
    heapq.heappush(queue,i[1]) #ํž™์— ์ปต๋ผ๋ฉด ์ˆ˜ ์ถ”๊ฐ€
    if i[0] < len(queue): #๋ฐ๋“œ๋ผ์ธ์ด queue์˜ ๊ธธ์ด๋ณด๋‹ค ์ž‘๋‹ค๋ฉด
        heapq.heappop(queue)

print(sum(queue))

 

 

ํ’€์ด

๋ฐ๋“œ๋ผ์ธ๊ณผ ์ปต๋ผ๋ฉด์ˆ˜๋ฅผ array๋ผ๋Š” ๋ฐฐ์—ด์— ์ €์žฅํ•˜๊ณ  array๋ฅผ ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌํ•œ๋‹ค. → ๋ฐ๋“œ๋ผ์ธ์ด ์ฐจ๋ก€๋Œ€๋กœ ์ปค์งˆ ๊ฒƒ์ด๋‹ค.

 

๋ฐ˜๋ณต๋ฌธ์„ ํ†ตํ•ด queue๋ผ๋Š” ํž™์— ์ปต๋ผ๋ฉด ์ˆ˜๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ  ๊ทธ ๋ฐ๋“œ๋ผ์ธ์ด queue์˜ ๊ธธ์ด๋ณด๋‹ค ์ž‘์€ ๊ฒฝ์šฐ์—, ์ฆ‰ ์ด๋ฏธ queue์— ์žˆ๋Š” ๋ฌธ์ œ๋“ค์„ ํ‘ธ๋Š” ๊ฒƒ๋งŒ์œผ๋กœ ๋ฐ๋“œ๋ผ์ธ์„ ๋„˜์–ด์„œ๋Š” ๊ฒฝ์šฐ์—๋Š” heapq.heappop(queue)๋ฅผ ์ด์šฉํ•ด์„œ queue์— ์žˆ๋Š” ๊ฐ€์žฅ ์ž‘์€ ์ปต๋ผ๋ฉด ์ˆ˜๋ฅผ ์—†์•ค๋‹ค. ๊ฐ€์žฅ ์ตœ๊ทผ์— ๋‹ด์€ ์ปต๋ผ๋ฉด์ˆ˜๊ฐ€ ๊ฐ€์žฅ ์ž‘์œผ๋ฉด queue์— ๋„ฃ์ž๋งˆ์ž ๋ฐ”๋กœ ๋น ์ง€๋Š” ๊ฒƒ์ด๋‹ค. ๊ทธ๊ฒŒ ์•„๋‹ˆ๋ผ๋ฉด ๋” ์ž‘์€ ๋‹ค๋ฅธ ์ปต๋ผ๋ฉด ์ˆ˜๋ฅผ ์—†์• ๋Š” ๊ฒƒ์ด๊ณ  ์ด๋Š” ๊ฐ€์žฅ ์ตœ๊ทผ์— ๋‹ด์€ ์ปต๋ผ๋ฉด ์ˆ˜๊ฐ€ ๋ฐ๋“œ๋ผ์ธ ๋‚ด์— ๋“ค์–ด์˜ฌ ์ˆ˜ ์žˆ๋„๋ก ํ•  ์ˆ˜ ์žˆ๋‹ค. 

 

์ด๋ ‡๊ฒŒ ํ’€๋ฉด ๋™ํ˜ธ๊ฐ€ ๋ฐ›์„ ์ˆ˜ ์žˆ๋Š” ์ตœ๋Œ€ ์ปต๋ผ๋ฉด ์ˆ˜๋ฅผ ๊ตฌํ•  ์ˆ˜ ์žˆ๋‹ค. 

 

 

 


 

๊ธฐํƒ€

์›๋ž˜๋Š” ๋ฐ๋“œ๋ผ์ธ์„ ๊ธฐ์ค€์œผ๋กœํ•ด์„œ ๋ฐ๋“œ๋ผ์ธ์ด ํฐ ๋ฌธ์ œ๋ถ€ํ„ฐ ์ฐจ๋ก€๋Œ€๋กœ ํ์— ์ง‘์–ด๋„ฃ๋Š”๋ฐ ๊ทธ ์ค‘์—์„œ๋„ ์ปต๋ผ๋ฉด ์ˆ˜๊ฐ€ ๋งŽ์€ ๊ฒƒ์„ ์šฐ์„ ์ ์œผ๋กœ ํ์— ๋‹ด์„ ์ˆ˜ ์žˆ๋„๋ก ํ–ˆ๋‹ค.

๋ฐ๋“œ๋ผ์ธ์ด ํ˜„์žฌ ํ์˜ ๊ธธ์ด๋ณด๋‹ค ๊ธธ๋‹ค๋ฉด, ์ฆ‰ ์•„์ง ํ•ด๋‹น๋ฌธ์ œ๋ฅผ ์ฃผ์–ด์ง„ ๋ฐ๋“œ๋ผ์ธ ๋‚ด์— ํ’€ ์ˆ˜ ์žˆ๋Š” ์ƒํƒœ๋ผ๋ฉด ํ์— ๋‹ด๊ณ , 

๋ฐ๋“œ๋ผ์ธ์ด ํ˜„์žฌ ํ์˜ ๊ธธ์ด๋ณด๋‹ค ์งง๋‹ค๋ฉด, ์ฆ‰ ํ•ด๋‹น๋ฌธ์ œ๋ฅผ ์ฃผ์–ด์ง„ ๋ฐ๋“œ๋ผ์ธ ๋‚ด์— ํ’€ ์ˆ˜ ์—†๋Š” ์ƒํƒœ๋ผ๋ฉด ํ์— ์žˆ๋Š” ๊ฐ€์žฅ ์ž‘์€ ์ปต๋ผ๋ฉด์ˆ˜์™€ ํ•ด๋‹น ์ปต๋ผ๋ฉด์ˆ˜๋ฅผ ๋น„๊ตํ•ด์„œ ํ•ด๋‹น ์ปต๋ผ๋ฉด ์ˆ˜๊ฐ€ ๋” ํฌ๋‹ค๋ฉด ๊ฐ€์žฅ ์ž‘์€ ์ปต๋ผ๋ฉด ์ˆ˜๋ฅผ ํ์—์„œ ์—†์• ๊ณ  ํ•ด๋‹น ์ปต๋ผ๋ฉด ์ˆ˜๋ฅผ ๋„ฃ์–ด์„œ ์ตœ๋Œ€ํ•œ ๋งŽ์€ ์ปต๋ผ๋ฉด์„ ๊ฐ€์ง€๋„๋ก ์ฝ”๋“œ๋ฅผ ์งฐ๋‹ค.

 

์™œ์ธ์ง€๋Š” ๋ชจ๋ฅด๊ฒ ์œผ๋‚˜ ์‹œ๊ฐ„์ดˆ๊ณผ๊ฐ€ ๋‚˜์™”๋‹ค. 

 

 

์ฝ”๋“œ

import sys
import heapq
input = sys.stdin.readline

n = int(input())

heap = []

array = []
for i in range(n):
    array.append(list(map(int, input().split())))
    array[i].reverse() #0์—ด์ด ์ปต๋ผ๋ฉด์ˆ˜ , 1์—ด์ด ๋ฐ๋“œ๋ผ์ธ
    
array.sort(key=lambda x: (x[0], -x[1]))


for i in range(n):
    if len(heap) < array[i][1]:
        heapq.heappush(heap,[(-1)*array[i][0],array[i][1]])
    elif abs(heap[0][0]) < array[i][0]:
        heapq.heappop(heap)
        heapq.heappush(heap,[(-1)*array[i][0],array[i][1]])

result = 0
while len(heap)!=0:
    result += heapq.heappop(heap)[0]
print(abs(sum(heap)))

 

 

๋ฐ˜์‘ํ˜•