๊ทธ๋ฆฌ๋ ์๊ณ ๋ฆฌ์ฆ(Greedy Algorithm)
ํ์๋ฒ์ผ๋ก๋ ์๋ ค์ง ๋ฌธ์ ํด๊ฒฐ ๋ฐฉ๋ฒ์ด๋ค.
์ด๋ฆ ๊ทธ๋๋ก ์ฃผ์ด์ง ๋ฌธ์ ๋ฅผ ๋จ์ํ๊ฒ ํ์์ ์ผ๋ก ํธ๋ ์๊ณ ๋ฆฌ์ฆ์ด๋ค.
ํ์์ ์ด๋ผ๋ ๋ง์ 'ํ์ฌ ์ํฉ์์ ๊ฐ์ฅ ์ข์ ๊ฒ๋ง ๊ณ์ ๊ณ ๋ฅด๋ ๋ฐฉ๋ฒ'์ ๋งํ๋ค.
๊ทธ๋ฆฌ๋ ๋ฐฉ๋ฒ์ ์๊ณ ๋ฆฌ์ฆ์ ๊ฐ ๋จ๊ณ์์ ๊ทธ ์๊ฐ์ ์ต์ ์ด๋ผ๊ณ ์๊ฐํ๋ ๊ฒ์ ์ ํํ๋ค.
๋ํ ๊ทธ๋ฆฌ๋๋ก ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ๋๋ ํ์ฌ์ ์ ํ์ด ๋ง์ง๋ง ํด๋ต์ ์ต์ ์ฑ์ ํด์น์ง ์์ ๋ ์ฌ์ฉํ ์ ์๋ค.
์ฐ๋ฆฌ๋ ๊ทธ๋ฆฌ๋ ๋ฌธ์ ๋ฅผ ํ ๋๋ ๋ค์ต์คํธ๋ผ(dijkstra) ๋๋ ์์ ์ ๋ ฌ(topological sort) ์๊ณ ๋ฆฌ์ฆ์ฒ๋ผ ํน์ ์๊ณ ๋ฆฌ์ฆ ์ฝ๋๋ฅผ ๋ฏธ๋ฆฌ ์ ํ์๋ ์๋ค. ๋์ ์ฐ๋ฆฌ๋ ๋ฌธ์ ๋ฅผ ๋ดค์ ๋ '๊ทธ ๋ฌธ์ ๊ฐ ๊ทธ๋ฆฌ๋ ์๊ณ ๋ฆฌ์ฆ์ผ๋ก ํด๊ฒฐํ ์ ์๋์ง'์ ๋ํด ์์์ผ ํ๋ค. ๊ทธ๋ผ ์ด๋ป๊ฒ ์ ์ ์์๊น?
๋ค์ํ ๊ทธ๋ฆฌ๋ ์๊ณ ๋ฆฌ์ฆ ์ ํ์ ๋ฌธ์ ๋ฅผ ํ์ด๋ด์ผ ํ๋ค. ์ํ ๋ฌธ์ ๋ฅผ ํ๋ฏ, ํต์ฌ ํค์๋๋ ์กฐ๊ฑด์ ๋ณด๊ณ ์ด๋ค ์ ํ์ธ์ง ์์์ผ ํ๋ค. ๋ง์ฝ ์ด๋ค ๋ฌธ์ ๋ฅผ ๋ณด์์ ๋, ๋ฌธ์ ์ ํ์ ์ ๋ชจ๋ฅด๊ฒ ์ผ๋ฉด ๊ทธ๋ฆฌ๋ ์๊ณ ๋ฆฌ์ฆ์ ์๊ฐํด ๋ณด๊ณ , ํ์์ ์ธ ๋ฐฉ๋ฒ์ผ๋ก ์ ๊ทผ ๊ฐ๋ฅํ์ง ๊ณ ๋ฏผํด๋ณด๋ฉด ์ข๋ค.
ํ์์ ์ธ ๋ฐฉ๋ฒ์ผ๋ก ๋ฌธ์ ๋ฅผ ์ ๊ทผํ์ ๋, ๋ชจ๋ case์ ์ ์ฉ๊ฐ๋ฅํ์ง ์๊ฐํด๋ด์ผํ๋ค. ํญ์ ์ต์ ์ ํด๋ฅผ ๋ณด์ฅํ ์ ์๋์ง ๊ณ ๋ฏผํด๋ด์ผ ํ๋ค. ๊ทธ๋ฆฌ๋ ์๊ณ ๋ฆฌ์ฆ์ผ๋ก ํด๊ฒฐ ๋ฐฉ๋ฒ์ ์ฐพ์ ์ ์๋ค๋ฉด, ๋ค์ด๋ด๋ฏน ํ๋ก๊ทธ๋๋ฐ์ด๋ ๊ทธ๋ํ ์๊ณ ๋ฆฌ์ฆ์ผ๋ก๋ ๊ฐ๋ฅํ์ง ๋ค์ ๊ณ ๋ฏผํด ๋ณด์.
์์ ) BOJ 11047 - ๋์ 0
https://www.acmicpc.net/problem/11047
N, K = map(int, input().split())
Coins = []
count = 0
for _ in range(N):
Coins.append(int(input()))
for i in range(N - 1, -1, -1):
if K - Coins[i] >= 0:
count += K // Coins[i]
K %= Coins[i]
print(count)
๊ทธ๋ฆฌ๋ ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ๋ ๋ํ์ ์ธ ๋ฌธ์ . ์์ด๋์ด๋ง ๋ ์ฌ๋ฆฌ๋ฉด ๊ฐ๋จํ๊ฒ ํด๊ฒฐํ ์ ์๋ค.
ํํ๋ฅผ ์๊ฐํ๋ฉด ์ฝ๊ฒ ๋ ์ฌ๋ฆด ์ ์๋ค. ๋์ ์ ๊ฐ์๋ฅผ ์ต์ํํ๋ ค๋ฉด ๋์ ์ ๊ฐ์ด ํฐ ์์๋๋ก ๋นผ๋ณด๋ฉด ๋๋ค.
์๋ฅผ ๋ค์ด 700์์ ์๊ฐํ๋ฉด 700์์ ๋์ง ์๋ ๊ฐ์ฅ ํฐ ๊ฐ 500์์ ๋นผ์ฃผ๊ณ , ๋จ์ 200์์ 200์์ ๋์ง์๋ ๊ฐ์ฅ ํฐ ๊ฐ 100์ ๋ ๊ฐ๋ฅผ ๋นผ์ฃผ๋ฉด ๋๋ค. ๋ฐ๋ผ์ ๋งค๋ฒ ์ ํํ ๋๋ง๋ค ๊ฐ์ฅ ํฐ ๊ธ์ก์ ๊ณ ๋ฅด๋ฉด ๋์ ๊ฐ์๋ฅผ ์ต์ํํ ์ ์๋ค.
๋ํ ์กฐ๊ฑด์์ ๋์ ์ ๊ฐ๋ค์ด ๋ฐฐ์๊ด๊ณ์ธ ๊ฒ๋ ํํธ๊ฐ ๋ ์ ์๋ค.