1781 : ์ปต๋ผ๋ฉด#
์๊ฐ์ ํ |
๋ฉ๋ชจ๋ฆฌ์ ํ |
์ ๋ต๋น์จ |
---|---|---|
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#
์ซ์๊ฐ ์ง๋๊ฐ๋ค n๊น์ง
ํด๋น ์ซ์์ผ๋ ์ต๋๊ฐ์ ๋ฝ์๋ด๊ณ ๋๋จธ์ง๋ ๋ฒ๋ฆฐ๋ค.
์ฐ์ ๋จผ์ 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