From ae7df303659485f5d0c26fd9c4e964412031f062 Mon Sep 17 00:00:00 2001 From: sm4640 Date: Mon, 30 Mar 2026 14:57:21 +0900 Subject: [PATCH] =?UTF-8?q?10844-s1=20=EC=84=B1=EA=B3=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- workbook_7319/silver/10844-s1.py | 44 ++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 workbook_7319/silver/10844-s1.py 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