diff --git a/workbook_7319/silver/10844-s1.py b/workbook_7319/silver/10844-s1.py new file mode 100644 index 0000000..30e3c89 --- /dev/null +++ b/workbook_7319/silver/10844-s1.py @@ -0,0 +1,44 @@ +# 쉬운 계단 수 + +import sys + +input = sys.stdin.readline + +def solution(): + n = int(input().rstrip()) + MOD = 1000000000 + + dp = [[1]*10 for _ in range(n)] + dp[0][0] = 0 + + for i in range(1, n): + for j in range(10): + if i == 1 and j == 1: + dp[i][j] = dp[i-1][j+1] + continue + if j == 0: + dp[i][j] = dp[i-1][j+1] + elif j == 9: + dp[i][j] = dp[i-1][j-1] + else: + dp[i][j] = (dp[i-1][j-1] + dp[i-1][j+1])%MOD + + print(sum(dp[n-1])%MOD) + + return + + +solution() + +""" +걸린 시간: 25분 + +시간 복잡도: n*10 칸을 채워야하기 때문에 O(10n)이다. + +해설: dp[i][j]는 i번째 자리수가 j로 끝날때 경우의 수이다. +이전 행의 앞뒤에서만 올 수 있으므로, dp[i][j] = dp[i-1][j-1] + dp[i-1][j+1]이다. +0과 9는 각각 오른쪽과 왼쪽에서만 올 수 있고, 두번째 행에서 1은 0으로 시작할 수 없기 때문에 오른쪽에서만 와야한다. +위 조건 그대로 코드로 구현한 뒤 mod로 나머지들만 계속 업데이트해가면 된다. +마지막 수는 어떤 숫자든 가능하기 때문에 마지막 행의 모든 값을 더한 후 mod해서 답을 구한다. +mod 공식은 1904 풀이를 확인하자. +""" \ No newline at end of file