"์ง๊ธ ๋น์ฅ ๋ณด๊ธฐ์ ์ ์ผ ์ข์ ๋ณด์ด๋ ์ ํ์ ํ๋ ์๊ณ ๋ฆฌ์ฆ"
๋ค์ ๋งํ๋ฉด, ๋งค ์๊ฐ ์ต์ ์ ์ ํ์ ๋ฐ๋ณตํ๋ ๋ฐฉ์.
โ๏ธ ๊ฐ๋จํ์ง๋ง, ๊ตฌ์กฐ ์๋ชป ์ก์ผ๋ฉด ํ๋ฆด ์๋ ์์.
๋ค์ ๋ ์กฐ๊ฑด์ ๋ง์กฑํ ๋๋ง ๊ทธ๋ฆฌ๋๊ฐ ํตํ๋ค:
| ์กฐ๊ฑด | ์ค๋ช |
|---|---|
| โ Greedy Choice Property | ๋งค ์๊ฐ์ ์ต์ ์ด ์ ์ฒด์ ์ผ๋ก๋ ์ต์ ์ด์ด์ผ ํจ |
| โ Optimal Substructure | ๋ฌธ์ ๋ฅผ ๋ถ๋ถ ๋ฌธ์ ๋ก ์ชผ๊ฐ๋ ์ฑ์ง์ด ์ ์ง๋ผ์ผ ํจ |
์ฝ๊ฒ ๋งํด์, ๊ทธ ์๊ฐ์ ์ ํ์ด ์ ์ฒด ์ ๋ต์ ๊นจ๋จน์ผ๋ฉด ๊ทธ๋ฆฌ๋๋ ๋ชป ์.
| ๊ตฌ๋ถ | ๊ทธ๋ฆฌ๋ | DP |
|---|---|---|
| ์ ๋ต | ๋งค ์๊ฐ ์ต์ | ์ ๋ถ ๊ณ ๋ คํด์ ์ต์ |
| ์๋ | ๋น ๋ฆ | ๋๋ฆด ์ ์์ |
| ์ ๋ต ๋ณด์ฅ | ํญ์ ๋๋ ๊ฑด ์๋ | ์กฐ๊ฑด ๋ง์ผ๋ฉด ๋ณด์ฅ๋จ |
| ์์ | ๋์ ๊ฑฐ์ค๋ฆ๋, ํ์์ค ๋ฐฐ์ | ๋ฐฐ๋ญ ๋ฌธ์ , ์ต์ ๊ฑฐ๋ฆฌ, ๋ฑ๋ฑ |
1260์์ ๋์ ์ผ๋ก ๊ฑฐ์ฌ๋ฌ์ค ๋, ๊ฐ์ฅ ์ ์ ๋์ ๊ฐ์๋?
coins = [500, 100, 50, 10]
n = 1260
count = 0
for coin in coins:
count += n // coin
n %= coin
print(count) # ์ถ๋ ฅ: 6
โ๏ธ ํต์ฌ์ ํฐ ๋จ์๋ถํฐ ๋จผ์ ์ฐ๋ ๊ฒ
โ๏ธ ์ด ๋ฌธ์ ๋ ๋์ ๋จ์๊ฐ ๊ทธ๋ฆฌ๋ ์กฐ๊ฑด์ ๋ง์กฑํ๋๊น ์ ๋ต ๋์ด
N๊ฐ์ ํ์๊ฐ ์์/๋ ์๊ฐ์ด ์ฃผ์ด์ง ๋, ๊ฒน์น์ง ์๊ฒ ์ต๋ ๋ช ๊ฐ๊น์ง ๋ฐฐ์ ๊ฐ๋ฅ?
n = int(input())
meetings = [tuple(map(int, input().split())) for _ in range(n)]
# ์ข
๋ฃ ์๊ฐ ๊ธฐ์ค์ผ๋ก ์ ๋ ฌ
meetings.sort(key=lambda x: (x[1], x[0]))
count = 0
end_time = 0
for start, end in meetings:
if start >= end_time:
count += 1
end_time = end
print(count)
โ๏ธ ๋๋๋ ์๊ฐ์ด ๋น ๋ฅผ์๋ก โ ์ดํ ํ์ ๋ฐฐ์ ํ ์ฌ์ง๊ฐ ๋ง์์ง
โ๏ธ ๊ทธ๋์ ์ข
๋ฃ ์๊ฐ ๊ธฐ์ค ์ ๋ ฌ์ด ํต์ฌ์
N๊ฐ์ ๋์ ์ข ๋ฅ๋ก K์์ ๋ง๋ค ๋, ์ต์ ๋์ ๊ฐ์ ๊ตฌํ๊ธฐ
import sys
input = sys.stdin.readline
N, K = map(int, input().split())
coins = [int(input()) for _ in range(N)]
coins.sort(reverse=True)
count = 0
for coin in coins:
count += K // coin
K %= coin
print(count)
โ๏ธ ํฐ ๋จ์๋ถํฐ ๋จผ์ ์จ์ผ ์ต์ ๊ฐ์
โ๏ธ ๋์ ์ด ์ ๋ ฌ๋ผ ์๋ค๋ ๋ณด์ฅ ์์ผ๋๊น sort(reverse=True) ๊ผญ ํด์ค์ผ ํจ
๊ทธ๋ฆฌ๊ณ ์ค์ ์ฝํ ์์๋
DP? ๊ทธ๋ฆฌ๋? ์ด๋ถํ์? ํ๋จํ๋ ๋ฅ๋ ฅ์ด ์ง์ง ์ค๋ ฅ์.