[백준] 2225번 합분해

거북이·2023년 2월 27일
0

백준[골드5]

목록 보기
31/82
post-thumbnail

💡문제접근

  • 각각의 예시를 통해서 나올 수 있는 경우의 수를 구한 다음 표를 통해서 규칙성을 확인한 다음 점화식을 세워 해결할 수 있었다.
  • 2차원 배열을 통한 다이나믹 프로그래밍 해결 방법도 익숙해지도록 많이 활용해봐야겠다.
dp배열k=0k=1k=2k=3k=4k=5k=6k=7k=8k=9k=10k=11k=12
n=00000000000000
n=10111111111111
n=202345678910111213
n=303610152128364555667891
n=4041020355684120165220288366457
  • 0 ~ N까지의 숫자 중에서 K개를 택해서 합이 N이 되도록 만들 수 있는 조합의 개수를 표로 나타낸 것이다.
  • 예를 들어, dp[2][2] = (dp[2][1] + dp[1][2]) % 1,000,000,000이 된다는 것을 알 수 있다.

💡코드(메모리 : 32276KB, 시간 : 60ms)

import sys
input = sys.stdin.readline

N, K = map(int, input().strip().split())
dp = [[0] * 201 for _ in range(201)]

for i in range(1, 201):
    dp[1][i] = 1
    dp[2][i] = i + 1

for i in range(2, 201):
    dp[i][1] = i
    for j in range(2, 201):
        dp[i][j] = (dp[i][j-1] + dp[i-1][j]) % 1000000000
print(dp[K][N])

💡소요시간 : 17m

0개의 댓글