[백준] 10844번 쉬운 계단 수

거북이·2023년 1월 31일
0

백준[실버1]

목록 보기
11/67
post-thumbnail

💡문제접근

  • 단편적으로 규칙성을 찾아보았지만 눈에 띄는 규칙성이 없었다. 가능한 경우들을 하나하나 나열하면서 정리를 해봤는데 아래의 표와 같은 변화를 확인할 수 있었다. 표를 기반으로 코드를 작성할 수 있었다. DP문제는 규칙성을 빠르고 정확하게 찾아내는 것이 문제의 핵심인 것 같다.
숫자의 자릿수0123456789결과
101111111119
2112222222117
3133444443232
  • 예를 들어 숫자의 자릿수가 3인 경우 마지막 자리에 위치하는 숫자가 5인 경우의 값은 숫자의 자릿수가 2인 경우 마지막 자리에 위치하는 숫자가 4인 경우와 숫자의 자릿수가 2인 경우 마지막 자리에 위치하는 숫자가 6인 경우의 합이 된다.

💡코드(메모리 : 31256KB, 시간 : 48ms)

import sys
input = sys.stdin.readline

N = int(input().strip())

dp = [[0] * 10 for _ in range(101)]
for i in range(1, 10):
    dp[1][i] = 1
    for a in range(2, N+1):
        for b in range(10):
            if b == 0:
                dp[a][b] = dp[a-1][1]
            elif b == 9:
                dp[a][b] = dp[a-1][8]
            else:
                dp[a][b] = dp[a-1][b-1] + dp[a-1][b+1]
print(sum(dp[N]) % 1000000000)

💡소요시간 : 41m

0개의 댓글