[python] ๋ฐฑ์ค - 2410. 2์ ๋ฉฑ์์ ํฉ
๐ค๋ฌธ์ ํด๊ฒฐ
-
S1 | ๋ค์ด๋๋ฏนํ๋ก๊ทธ๋๋ฐ
-
์ ์ฌํ ๋ฌธ์
[python] ๋ฐฑ์ค - 9084. ๋์
๐ค๋ฌธ์ ํด๊ฒฐ 1. S1 | ๋ค์ด๋๋ฏน ํ๋ก๊ทธ๋๋ฐ 2. target(๋ง๋ค์ด์ผ ํ๋ ๊ธ์ก)์ ๊ธธ์ด๋งํผ์ ๋ฆฌ์คํธ๋ฅผ ๋ง๋ ๋ค. 3. ๋ด๊ฐ ๊ฐ์ง ๋์ ์ ํ๋ํ๋ ๊บผ๋ด์ ๋ฆฌ์คํธ์ ์ธ๋ฑ์ค(๋ด๊ฐ ๋ง๋ค ์ ์๋ ๊ธ์ก)๊ณผ ๋น๊ตํ๏ฟฝ๏ฟฝ
deok2kim.tistory.com
๋์ ๋ฌธ์ ์ ๋ค๋ฅธ ์ ์ ๋์ ์ ์ฒ์๋ถํฐ ์ฌ์ฉํ ๊ฐ์ด ์ ํด์ ธ ์์ง๋ง
์ด ๋ฌธ์ ๋ N์ ํฌ๊ธฐ์ ๋ฐ๋ผ ์ฌ์ฉํ ์ ์๋ ๊ฐ์ด ๋์ด๋๋ค.
N์ด 7์ด๋ฉด 1,2,4 ์ด์ง๋ง N์ด 8์ด๋ฉด 1,2,4,8 ์ ์ฌ์ฉํ ์ ์๋ค.
๐จ
๐ป์์ค ์ฝ๋
def solution(N):
nums = [2 ** x for x in range(21)]
dp = [0] * (N + 1)
dp[0] = 1
for num in nums:
if num <= N:
for j in range(num, N + 1):
dp[j] += dp[j - num]
print(dp[-1] % 1000000000)
if __name__ == "__main__":
N0 = int(input())
solution(N0)
๐๋ฌธ์ ํ์ธ
์ถ์ฒ: BACKJOON ONLINE JUDGE
๋งํฌ: https://www.acmicpc.net/problem/2410
2410๋ฒ: 2์ ๋ฉฑ์์ ํฉ
์ฒซ์งธ ์ค์ ๊ฒฝ์ฐ์ ์๋ฅผ ์ถ๋ ฅํ๋ค. ๋ต์ด ์ปค์ง ์ ์์ผ๋ฏ๋ก 1,000,000,000์ผ๋ก ๋๋ ๋๋จธ์ง๋ฅผ ์ถ๋ ฅํ๋ค.
www.acmicpc.net
๋ฌธ์
์ด๋ค ์์ฐ์ N์ 2์ ๋ฉฑ์์ ํฉ์ผ๋ก ๋ํ๋ด๋ ๊ฒฝ์ฐ์ ์๋ฅผ ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค. 2์ ๋ฉฑ์๋ผ๋ ๊ฒ์, 2^k์ผ๋ก ํํ๋๋ ์์ฐ์๋ฅผ ์๋ฏธํ๋ค.
์๋ฅผ ๋ค์ด 7์ 2์ ๋ฉฑ์์ ํฉ์ผ๋ก ๋ํ๋ด๋ ๊ฒฝ์ฐ์ ์๋ ๋ค์์ ์ฌ์ฏ ๊ฐ์ง๊ฐ ์๋ค.
์ ๋ ฅ
์ฒซ์งธ ์ค์ N(1≤N≤1,000,000)์ด ์ฃผ์ด์ง๋ค.
์ถ๋ ฅ
์ฒซ์งธ ์ค์ ๊ฒฝ์ฐ์ ์๋ฅผ ์ถ๋ ฅํ๋ค. ๋ต์ด ์ปค์ง ์ ์์ผ๋ฏ๋ก 1,000,000,000์ผ๋ก ๋๋ ๋๋จธ์ง๋ฅผ ์ถ๋ ฅํ๋ค.