๋ฌธ์
https://www.acmicpc.net/problem/2293
2293๋ฒ: ๋์ 1
์ฒซ์งธ ์ค์ n, k๊ฐ ์ฃผ์ด์ง๋ค. (1 ≤ n ≤ 100, 1 ≤ k ≤ 10,000) ๋ค์ n๊ฐ์ ์ค์๋ ๊ฐ๊ฐ์ ๋์ ์ ๊ฐ์น๊ฐ ์ฃผ์ด์ง๋ค. ๋์ ์ ๊ฐ์น๋ 100,000๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์ ์์ฐ์์ด๋ค.
www.acmicpc.net
๋ด ๋ฌธ์ ํ์ด
import sys
n, k = map(int, sys.stdin.readline().strip().split())
coin = []
for _ in range(n):
coin.append(int(sys.stdin.readline().strip()))
dp = [0 for _ in range(k+1)]
dp[0] = 1
for c in coin:
for i in range(c, k+1):
dp[i] += dp[i - c]
print(dp[-1])
๐ DP ๋ฌธ์
์ ํ์์ ๊ตฌํ๋ ๊ณผ์ ์ ์๋ ๊ทธ๋ฆผ์ผ๋ก ํํํ๋ค.
๋ํ๋ก 1, 2, 5 ๋์ ์ ๋ชจ๋ ์ฌ์ฉํ์ฌ '6'์ ๋ง๋๋ ๊ณผ์ ์ ์์ ํ๋ค.
6์ ๊ฒฝ์ฐ (1, 1, 1, 1, 1), (1, 1, 1, 1, 2), (1, 1, 2, 2), (2, 2, 2), (1, 5) ์ด๋ ๊ฒ 5๊ฐ์ง ๊ฒฝ์ฐ์ ์๋ฅผ ๊ฐ์ง๋๋ฐ,
์ด๋ ๊ธฐ์กด์ 1๊ณผ 2๋ง ๊ฐ์ง๊ณ 6์ ๋ง๋ค์๋ ๊ฒฝ์ฐ์ ์์, '6 - 5' ์ ๊ฒฝ์ฐ์ ์๋ฅผ ๋ํด์ฃผ๋ฉด ๋๋ ๊ฒ์ ์ ์ ์๋ค.
=> dp[i] += dp[i - c]
๐ก ํผ๋๋ฐฑ
์ ํ์ ๋์ถ ๊ณผ์ ์์,, ์๋ฏ ๋ง๋ฏ ํ์ฌ ์์ฃผ ์ค๋๊ฑธ๋ ธ๋ค.
๋ง์ด ํ๋ฉด ๋์์ง๊ฒ ์งใ ก,?,,
'4๏ธโฃ Python > Problem Solving' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Python Algorithm] ๋ค๋ฆฌ ๋๊ธฐ BOJ #1010 (0) | 2022.05.26 |
---|---|
[Python Algorithm] LCS BOJ #9251 (0) | 2022.05.26 |
[Python Algorithm] AC BOJ #5430 (0) | 2022.05.24 |
[Python Algorithm] ์ ํ๋ฒํธ ๋ชฉ๋ก BOJ #5052 (0) | 2022.05.24 |
[Python Algorithm] ๊ณตํต ๋ถ๋ถ ๋ฌธ์์ด BOJ #5582 (0) | 2022.05.24 |
๋๊ธ