https://www.acmicpc.net/problem/2839
dp์ ์ํ ๋ ๊ฐ์ง ๋ฐฉ๋ฒ์ผ๋ก ํ์๋ค.
- dp ํ์ด
dp ๋ฐฐ์ด์ ์ ์ธํด ์ฌ๊ธฐ์ ๋ต์ ์ ์ฅํด๊ฐ๋ฉฐ ํ ์ ์๋ค.
dp[n]์ n kg์ ์คํ์ ์ฎ๊ธฐ๋ ๋ฐ ํ์ํ ์ต์ํ์ ๋ด์ง์ ์๋ฅผ ์๋ฏธํ๋ค.
๊ณ์ฐ์ด ๊ท์ฐฎ์ง ์๋๋ก dp[3]๊ณผ dp[5]๋ 1๋ก ์ด๊ธฐํํด ์ค๋ค.
dp์ ๊ธธ์ด๊ฐ (N+1)์ด ์๋๋ผ max(6, N+1)์ธ ์ด์ ๋ ์ด๊ธฐํ ๊ณผ์ ์์ index ์๋ฌ๊ฐ ๋ฐ์ํ์ง ์๋๋ก ํ๊ธฐ ์ํจ์ด๋ค.
6 kg๋ถํฐ N kg๊น์ง for๋ฌธ์ ํตํด ์ํํ๋ฉฐ ํ์ํ ๋ด์ง์ ์๋ฅผ ๊ณ์ฐํ๋ค.
# 1 ๋ง์ฝ (n-3) kg์ ์ฎ๊ธธ ์ ์๋ค๋ฉด, ๊ทธ๊ฒ๋ณด๋ค ๋ด์ง ํ๋๋ฅผ ๋ ์ฐ๋ฉด ๋๋ค. dp[n]์ (dp[n-3]+1)๋ก ๊ฐฑ์ ํด ์ค๋ค.
# 2 ๋ง์ฝ (n-5) kg์ ์ฎ๊ธธ ์ ์๋ค๋ฉด, dp[n]์ (dp[n-5]+1)๋ก ๊ฐฑ์ ํด์ค๋ค. ๋ค๋ง (n-3) kg๋ ์ฎ๊ธธ ์ ์๋ค๋ฉด, dp[n](์ด๋ฏธ ๊ฐฑ์ ํจ)๊ณผ (dp[n-5]+1) ์ค ๋ ์์ ์์ ๋ด์ง๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ๋ก ๊ฐฑ์ ํด ์ค๋ค.
dp[N]์ด 0์ด๋ผ๋ฉด N kg์ ์คํ์ ์ฎ๊ธธ ์ ์๋ค๋ ์๋ฏธ์ด๋ฏ๋ก -1์ ์ถ๋ ฅํ๊ณ , ์๋๋ผ๋ฉด dp[N]์ ์ถ๋ ฅํ๋ฉด ๋๋ค.
N = int(input())
dp = [0] * max(6, N+1)
dp[3], dp[5] = 1, 1
for n in range(6, N+1):
# 1
if dp[n-3]:
dp[n] = dp[n-3] + 1
# 2
if dp[n-5]:
if dp[n-3]:
dp[n] = min(dp[n], dp[n-5] + 1)
else:
dp[n] = dp[n-5] + 1
print(dp[N]) if dp[N] else print(-1)
dp๊ฐ ๋ ๊น๋ํ๊ณ ํ๋ฆด ํ๋ฅ ๋ ๋ ๋ฎ์ ๋ณด์ธ๋ค.
- ์ํ ํ์ด
๊ฐ๋ฅํ๋ค๋ฉด 3kg ๋ด์ง๋ณด๋ค๋ 5kg ๋ด์ง๋ฅผ ๋ง์ด ์จ์ผ ํ๋ค๋ ์ ์์ ์ถ๋ฐํ ํ์ด์ด๋ค.
#1
์คํ์ ๋ฌด๊ฒ๊ฐ 5kg๋ก ๋๋ ๋จ์ด์ง ๋๊น์ง 3kg์ฉ ๋์ด๋ด ๋ณธ๋ค.
๋์ด๋ด๋ฉด์ ์ฌ์ฉํ๋ ๋ด์ง๋ ์นด์ดํ ํด ์ค๋ค.
๋๋ ๋จ์ด์ง์ง ์๋๋ผ๋ ๋ง์ฝ ๋จ์ ๋ฌด๊ฒ๊ฐ 5kg ์ดํ๋ผ๋ฉด ์ต์ข ๊ณ์ฐ์ ํด์ฃผ๊ธฐ ์ํด ์คํฑํ๋ค.
# 2
์ต์ข ์ ์ฐ์ ํด์ค๋ค.
๋จ์ ์คํ์ ๋ฌด๊ฒ๊ฐ 5๋ก ๋๋ ๋จ์ด์ง๋ค๋ฉด ์คํ์ ๋ด๊ณ ๋๋ธ๋ค.
๊ทธ๋ ์ง ์๋ค๊ณ ํด๋ 3์ผ๋ก ๋๋ ๋จ์ด์ง๋ค๋ฉด 3kg ๋ด์ง์ ์ ๋ด์์ ๋ง๋ฌด๋ฆฌํ๋ค
๋ ๋ค ํด๋น๋์ง ์๋๋ค๋ฉด ๋ถ๊ฐ๋ฅํ ๊ฒฝ์ฐ์ด๋ฏ๋ก -1๋ฅผ ์ถ๋ ฅํ๋ฉด ๋๋ค.
N = int(input())
answer = 0
# 1
while N >= 5 and N % 5:
answer += 1
N -= 3
# 2
if N % 5 == 0:
answer += N//5
elif N % 3 == 0:
answer += N//3
else:
answer = -1
print(answer)
์คํ ๋ฌด๊ฒ์ ๋๋จธ์ง, ๋ฆฌ์ผ ์ซ์๋ง์ ๊ณ ๋ คํ ํ์ด๋ ๊ฐ๋ฅํ๊ธด ํ๋ค.
์์ธ ์ฒ๋ฆฌ๋ฅผ ์ธ๊ฐ์ด ํด์ค ๊ฑฐ๋ผ ๊ตฌ๋ฆฌ๊ตฌ๋ฆฌํ ํ์ด์ด๋ค.
N = int(input())
answer = -1
if N % 5 == 0:
answer = N//5
elif N % 5 == 1:
answer = (N-6)//5 + 2
elif N % 5 == 2 and N >= 12:
answer = (N-12)//5 + 4
elif N % 5 == 3:
answer = (N-3)//5 + 1
elif N % 5 == 4 and N >= 9:
answer = (N-9)//5 + 3
print(answer)
'๋ฐฑ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋ฐฑ์ค 1002 ํฐ๋ - ํ์ด์ฌ (2) | 2022.12.30 |
---|---|
๋ฐฑ์ค 7785 ํ์ฌ์ ์๋ ์ฌ๋ - ํ์ด์ฌ (0) | 2022.12.29 |
๋ฐฑ์ค ์ ์ถ๋ ฅ - ํ์ด์ฌ (0) | 2022.11.29 |
๋ฐฑ์ค 1406 ์๋ํฐ - ํ์ด์ฌ (0) | 2022.11.27 |
๋ฐฑ์ค 2941 ํฌ๋ก์ํฐ์ ์ํ๋ฒณ - ํ์ด์ฌ, ์๋ฐ (0) | 2022.11.26 |