๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ’ป CS

200๋…„๊ฐ„ ํ๊ด€์ˆ˜๋ จํ–ˆ๋”๋‹ˆ PS ์ตœ๊ฐ•์ž๊ฐ€ ๋œ ๊ฑด์— ๋Œ€ํ•˜์—ฌ

by dev.py 2025. 2. 18.

 


from collections import namedtuple
from sys import stdin

Contest = namedtuple("Contest", ["limit", "prize"])
N = int(stdin.readline())

contests = [
    Contest(*map(int, stdin.readline().split()))
    for _ in range(N)
]

result = "Kkeo-eok"
total_prize = 0
max_prize = 0
skip_prize = 0
skip = False

for limit, prize in contests:
    if total_prize - skip_prize > limit: # ๋„˜์–ด๊ฐ„ ์ƒ๊ธˆ ๊ธฐ์ค€์œผ๋กœ ๊ณ„์‚ฐ
        if skip: # ๋ถˆ์ฐธํ•œ ์ ์ด ์ด๋ฏธ ์žˆ์œผ๋ฉด ์‹คํŒจ
            result = "Zzz"
            break

        skip = True
        if max_prize > prize and total_prize - max_prize <= limit: # ์ด์ „ ๋Œ€ํšŒ ๋ถˆ์ฐธ
            skip_prize = max_prize
        else: # ์ด๋ฒˆ ๋Œ€ํšŒ๋ฅผ ๋ถˆ์ฐธ
            skip_prize = prize

    total_prize += prize # ์ด ์ƒ๊ธˆ์€ ์Šคํ‚ต ์—ฌ๋ถ€ ๋”ฐ์ง€์ง€ ์•Š๊ณ  ๋”ํ•จ
    max_prize = max(max_prize, prize)

print(result)


# DP = [ [0] * 2 for _ in range(N+1)]
# for i in range(N):
#     if DP[i][0] != FAIL and DP[i][0] <= contests[i].limit:
#         DP[i+1][0] = DP[i][0] + contests[i].prize # ์ด๋ฒˆ ๊ฒฝ๊ธฐ ์ฐธ๊ฐ€
#         DP[i + 1][1] = DP[i][0] #  ์ด๋ฒˆ ๊ฒฝ๊ธฐ ์•ˆ์ฐธ๊ฐ€
#
#     elif DP[i][1] != FAIL and  DP[i][1]<= contests[i].limit:
#         DP[i+1][0] = DP[i][1] + contests[i].prize
#         DP[i + 1][1] = FAIL
#         count += 1
#     else:
#         result = "Zzz"
#         break
#     if count > 1:
#         result = "Zzz"
#         break

 

๋ณด์„ ๋ฌธ์ œ

https://www.acmicpc.net/problem/1202
https://www.acmicpc.net/problem/1480
https://www.acmicpc.net/problem/12865

 

 

์ฒ˜์Œ์— ๋ณด์„ ๋ฌธ์ œ๋ฅ˜ ์ธ์ค„ ์•Œ๊ณ , ํ•ด๋‹น ๋ฐฉ์‹ DP๋กœ ํ’€๋ ค๊ณ  ์‚ฝ์ง‘์„ ๋งŽ์ด ํ–ˆ๋‹ค.
๊ทธ๋Ÿฌ๋‹ค ์„ฑ๊ณต or ์‹คํŒจ๋งŒ ์ฒดํฌํ•˜๋ฉด ํ•˜๋Š”๊ฑธ ๊นจ๋‹ซ๊ณ , ์‹คํŒจํ•˜๋ฉด ์ด์ „ ๋Œ€ํšŒ์—์„œ max_prize ๋ž‘ ์ด๋ฒˆ ๋Œ€ํšŒ ์ƒ๊ธˆ ๋‘˜ ์ค‘์— ํฐ ๊ฐ’(๊ฐ€๋Šฅํ•œ๋‹ค๋ฉด) ์„ ๋นผ๊ณ  ๋‹ค์Œ ๋Œ€ํšŒ๋กœ ๋„˜์–ด๊ฐ€๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ ํ’€์—ˆ๋‹ค.