์คํ Nํฌ๋ก๊ทธ๋จ์ ์ฃผ๊ณ ์ด๊ฑธ 5ํฌ๋ก๊ทธ๋จ, 3ํฌ๋ก๊ทธ๋จ ๋ด์ง๋ก ๊ฐ์ฅ ์ ์ ๊ฐ์๋ก ๋๋๋ ๋ฌธ์ . ์ฒ์์๋ ์ํ์ผ๋ก ํด๊ฒฐํ๋ ค๋ค๊ฐ "๋์ " ๋ฌธ์ ๊ฐ ์๊ฐ๋์ DP๋ก ํด๊ฒฐํ๋ค.
์์ด๋์ด
nํฌ๋ก๊ทธ๋จ์ (n - 3) + 3 ๋๋ (n - 5) + 5๋ก ์๊ฐํ ์ ์๋ค.
๋ฐ๋ผ์ nํฌ๋ก๊ทธ๋จ์ ๋ด์ง ๊ฐ์๋ n - 3๊ณผ n - 5 ํฌ๋ก๊ทธ๋จ ๋ด์ง ๊ฐ์ ์ค ์์ ๊ฑฐ(min) + 1์ด ๋๋ค.
์ด ์์ด๋์ด๋ก ํด๊ฒฐํ๋ ค๋ฉด n - 3๊ณผ n - 5์ ๊ฐ์ ์ ๋ณด๋ฅผ ์ ์ฅํด ๋๋ค๊ฐ ์ฌ์ฌ์ฉ์ด ํ์ํ๋ค.
3 ~ nํฌ๋ก๊ทธ๋จ๊น์ง ๋ด์ง์ ์ต์ ๊ฐ์๋ฅผ ๋ด์ ๋ฆฌ์คํธ๋ฅผ ์ ์ธํด์ ํด๊ฒฐํ๋ฉด ๋๋ค(DP).
์ ์ฒด ์ฝ๋
N = int(input())
INF = int(10e9)
DP = [INF] * (5001)
DP[3] = 1
DP[5] = 1
for i in range(6, N + 1):
DP[i] = min(DP[i - 3], DP[i - 5]) + 1
if DP[N] < INF:
print(DP[N])
else:
print(-1)
์ฝ๋ ์ค๋ช
์๊ณ ๋ฆฌ์ฆ์ ์์ด๋์ด ์ค๋ช ๊ณผ ๊ฐ๋ค.
min ๋ฉ์๋๋ฅผ ์ฐ๊ธฐ ์ํด ๋ฆฌ์คํธ๋ฅผ INF๊ฐ์ผ๋ก ์ด๊ธฐํํด ์ค๋ค.
์๋ฅผ ๋ค์ด N = 10์ด๋ฉด DP[7]๊ณผ DP[5]๋ฅผ ๋น๊ตํ๋ค. ์ด๋ ๋ด์ง๋ก 7 ํฌ๋ก๊ทธ๋จ์ ๋ง๋๋ ๊ฒฝ์ฐ๋ ์์ผ๋๊น DP[7] = INF,
๋ฐ๋ผ์ DP[10] = DP[5] + 1์ด ๋๋ค.
๋ง์ง๋ง ์ถ๋ ฅํ ๋ DP[N]๊ฐ์ด INF๋ณด๋ค ํฌ๋ฉด -1, ์๋ค๋ฉด DP[N]๊ฐ์ ์ถ๋ ฅํด ์ค๋ค.