popeye0618

Backend Developer

[python] 백준 - 2225 (합분해)

ko 0 조회수 시리즈 · 알고리즘 #알고리즘

골드5 문제이며, 제한 시간은 2초이다.

문제

해결 과정

우선 경우의 수를 쫙 써봤다. 그랬더니 패턴이 보인다. 0으로 시작하는 수는 i - 1번째 경우의 수의 총 합 1로 시작하는 수는 i - 1번째 경우의 수에서 0으로 시작하는 경우의 수를 뺀 값

따라서 DP 배열에 i 번째에서 0으로 시작하는 경우가 몇 개인지, 1로 시작하는 수가 몇 개인지 저장해놓는다.

점화식 -> dp[i][j] = dp[i - 1][j:]

풀이

py
n, k = map(int, input().split())
dp = [[0 for _ in range(n + 1)] for _ in range(k + 1)]

for i in range(1, k + 1):
  for j in range(n + 1):
    if i == 1:
      dp[1][n] = 1
    else:
      dp[i][j] = sum(dp[i - 1][j:]) % 1000000000

print(sum(dp[k]) % 1000000000)

댓글

0

아직 댓글이 없습니다.

댓글 쓰기