1781 : ์ปต๋ผ๋ฉด

1781 : ์ปต๋ผ๋ฉด#

supposed to be surdarla logo

Surdarla

Nov 27 Mon 13:18, 2023

1 min read

  • https://d2gd6pc034wcta.cloudfront.net/tier/14.svg ๊ณจ๋“œ 2

์‹œ๊ฐ„์ œํ•œ

๋ฉ”๋ชจ๋ฆฌ์ œํ•œ

์ •๋‹ต๋น„์œจ

2์ดˆ

256MB

32%

๋ฌธ์ œ#

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

๋ฌธ์ œ ๋ฒˆํ˜ธ

1

2

3

4

5

6

7

๋ฐ๋“œ๋ผ์ธ

1

1

3

3

2

2

6

์ปต๋ผ๋ฉด ์ˆ˜

6

7

2

1

4

5

1

์œ„์™€ ๊ฐ™์€ ์ƒํ™ฉ์—์„œ ๋™ํ˜ธ๊ฐ€ 2, 6, 3, 1, 7, 5, 4 ์ˆœ์œผ๋กœ ์ˆ™์ œ๋ฅผ ํ•œ๋‹ค๋ฉด 2, 6, 3, 7๋ฒˆ ๋ฌธ์ œ๋ฅผ ์‹œ๊ฐ„ ๋‚ด์— ํ’€์–ด ์ด 15๊ฐœ์˜ ์ปต๋ผ๋ฉด์„ ๋ฐ›์„ ์ˆ˜ ์žˆ๋‹ค.

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

  • ๋ฌธ์ œ๋ฅผ ํ‘ธ๋Š”๋ฐ๋Š” ๋‹จ์œ„ ์‹œ๊ฐ„ 1์ด ๊ฑธ๋ฆฌ๋ฉฐ,

  • ๊ฐ ๋ฌธ์ œ์˜ ๋ฐ๋“œ๋ผ์ธ์€ N์ดํ•˜์˜ ์ž์—ฐ์ˆ˜์ด๋‹ค.

  • ๋˜, ๊ฐ ๋ฌธ์ œ๋ฅผ ํ’€ ๋•Œ ๋ฐ›์„ ์ˆ˜ ์žˆ๋Š” ์ปต๋ผ๋ฉด ์ˆ˜์™€ ์ตœ๋Œ€๋กœ ๋ฐ›์„ ์ˆ˜ ์žˆ๋Š” ์ปต๋ผ๋ฉด ์ˆ˜๋Š” ๋ชจ๋‘ \(2^{31}\)๋ณด๋‹ค ์ž‘์€ ์ž์—ฐ์ˆ˜์ด๋‹ค.

input#

์ฒซ ์ค„์— ์ˆ™์ œ์˜ ๊ฐœ์ˆ˜ N (1 โ‰ค N โ‰ค 200,000)์ด ๋“ค์–ด์˜จ๋‹ค. ๋‹ค์Œ ์ค„๋ถ€ํ„ฐ N+1๋ฒˆ์งธ ์ค„๊นŒ์ง€ i+1๋ฒˆ์งธ ์ค„์— i๋ฒˆ์งธ ๋ฌธ์ œ์— ๋Œ€ํ•œ ๋ฐ๋“œ๋ผ์ธ๊ณผ ํ’€๋ฉด ๋ฐ›์„ ์ˆ˜ ์žˆ๋Š” ์ปต๋ผ๋ฉด ์ˆ˜๊ฐ€ ๊ณต๋ฐฑ์œผ๋กœ ๊ตฌ๋ถ„๋˜์–ด ์ž…๋ ฅ๋œ๋‹ค.

output#

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

think#

  1. ์ˆซ์ž๊ฐ€ ์ง€๋‚˜๊ฐ„๋‹ค n๊นŒ์ง€

  2. ํ•ด๋‹น ์ˆซ์ž์ผ๋•Œ ์ตœ๋Œ“๊ฐ’์„ ๋ฝ‘์•„๋‚ด๊ณ  ๋‚˜๋จธ์ง€๋Š” ๋ฒ„๋ฆฐ๋‹ค.

  3. ์šฐ์„  ๋จผ์ € sorting ์„ ํ•˜๋Š” ๊ฒƒ๋„ ๋‚˜์˜์ง€ ์•Š์„ ๊ฒƒ์œผ๋กœ ๋ณด์ธ๋‹ค.

python#

import sys, os

problem_num = "1781"

path = os.getcwd() + f"\\txt\\{problem_num}" + ".txt"
sys.stdin = open(path, "r")
input = sys.stdin.readline
# n = int(input())
# dp = [0 for _ in range(n + 1)]  # max cup for position = dead
# for i in range(1, n + 1):
#     dead, cup = map(int, input().split())
#     dp[dead] = max(dp[dead], cup)
# print(sum(dp))
ํ•œ ๋ฐ๋“œ๋ผ์ธ์— ์—ฌ๋Ÿฌ ๋ฌธ์ œ๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ์Œ

์ฒ˜์Œ์— ์‹œ๋„ํ–ˆ๋˜ ๋ฐฉ์‹์€ ๊ฐ ๋ฐ๋“œ๋ผ์ธ์— ๋Œ€ํ•ด ํ•˜๋‚˜์˜ ๋ฌธ์ œ๋งŒ ๊ณ ๋ คํ–ˆ๋‹ค. ๋ฐ๋“œ๋ผ์ธ๋ณ„๋กœ ๊ฐ€์žฅ ๋งŽ์€ ์ปต๋ผ๋ฉด์„ ์ฃผ๋Š” ํ•˜๋‚˜์˜ ๋ฌธ์ œ๋งŒ์„ max๋กœ ์ง‘์–ด๋„ฃ๊ณ  ์ €์žฅํ•˜๋Š” ๋ฐฉ์‹์ด์—ˆ๋‹ค. ํ•˜์ง€๋งŒ ์‹ค์ œ๋กœ๋Š” ํ•œ ๋ฐ๋“œ๋ผ์ธ์— ์—ฌ๋Ÿฌ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜๋„ ์žˆ๋‹ค. ๋ฐ๋“œ๋ผ์ธ์ด 3์ธ ๋ฌธ์ œ๊ฐ€ ์—ฌ๋Ÿฌ ๊ฐœ๊ฐ€ ์žˆ๊ณ , 1์ด๋‚˜ 2์— ๋ฌธ์ œ๋“ค์ด ์—†๋Š” ๊ฒฝ์šฐ์˜€๋“œ๋ฉด 3์— ์—ฌ๋Ÿฌ ๋ฌธ์ œ๋ฅผ ํ•œ๋ฒˆ์— ํ’€ ์ˆ˜๋„ ์žˆ๋‹ค.

์ตœ์ ์˜ ์กฐํ•ฉ์„ ์ฐพ์ด ๋ชปํ•จ

๊ฐ ๋ฐ๋“œ๋ผ์ธ๋งˆ๋‹ค ๊ฐ€๋Šฅํ•œ ๋ชจ๋“  ๋ฌธ์ œ ์ค‘์—์„œ ๊ฐ€์žฅ ๋งŽ์€ ์ปต๋ผ๋ฉด์„ ์ฃผ๋Š” ๋ฌธ์ œ๋“ค์„ ์„ ํƒํ•ด์•ผํ•œ๋‹ค. ํ•˜์ง€๋งŒ ๋‚ด ์›๋ž˜ ์ฝ”๋“œ๋Š” ๊ฐ ๋ฐ๋“œ๋ผ์ธ ๋ณ„๋กœ ๋‹จ ํ•˜๋‚˜์˜ ๋ฌธ์ œ๋งŒ ๊ณ ๋ คํ•˜๋ฏ€๋กœ, ์ตœ์ ์˜ ์กฐํ•ฉ์„ ์ฐพ์ง€ ๋ชปํ•œ๋‹ค๋Š” ์น˜๋ช…์ ์ธ ๊ตฌ๋…•์ด ์žˆ๋‹ค.

๊ทธ๋ฆฌ๋”” ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ถ€์žฌ

๊ฐ ๋‹จ๊ณ„๋ณ„๋กœ ๋กœ์ปฌ ์ตœ์ ํ•ด๋ฅผ ์„ ํƒํ•จ์œผ๋กœ์จ ์ „์—ญ ์ตœ์ ํ•ด์— ๋„๋‹ฌํ•  ์ˆ˜ ์žˆ๋Š” ๊ทธ๋ฆฌ๋”” ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ํ™œ์šฉํ•˜์ง€ ๋ชปํ–ˆ๋‹ค. ์šฐ์„ ์ˆœ์œ„ํ(ํž™)์„ ์‚ฌ์šฉํ•ด ๊ทธ๋ฆฌ๋”” ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๋งŒ๋“ค์–ด๋‚ด์•ผํ•œ๋‹ค.

import heapq

n = int(input())
tasks = []
for _ in range(n):
    dead, cup = map(int, input().split())
    tasks.append((dead, cup))
tasks.sort()
heap = []
for d, c in tasks:
    heapq.heappush(heap, c)
    if len(heap) > d:
        heapq.heappop(heap)
print(sum(heap))
15