Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- 안드로이드주석
- 영어말하기
- 이진탐색
- 탑다운
- 오픽노잼
- topdown
- 다이나믹프로그래밍
- ㅂ
- opic
- 오픽가격
- dp
- 영어회화
- fibo
- 디피
- dynamicProgramming
- 오픽점수잘받는방법
- XML주석
- 오픽노잼공부방법
- 이진탐색 #나무 자르기
- stack 스택
- 안드로이드
- 피보나치수열
- English
- 오픽
- 메모이제이션
- 바텀업
- 주석
- 오픽공부법
- XML
Archives
RUBY
[백준] 쉬운 계단 수 본문
출처:: www.acmicpc.net/problem/10844
분류:: dp
1. 문제 이해 및 해결과정
- dp[i][j] = 길이가 i일때 , 끝자리가 j일 경우 계단 수의 개수 - 0은 계단수가 아니다 j 0 1 2 3 4 5 6 7 8 9 dp[1] 0 1 1 1 1 1 1 1 1 1 dp[2] 1 1 2 2 2 2 2 2 2 1 ex)dp[2][0] = 길이가 2일때, 끝자리가 0인 수의 개수 =>1개, 10 dp[3] 1 3 3 4 4 4 4 4 3 2 ex) dp[3][2] = 길이가 3일때, 끝자리가 2인 것의 개수 =>3개, 132 212 232 - dp[3][2] 를 보면, 끝자리가 2일 경우 가능한 앞자리는 1 과 3이다. 길이가 2이면서, 끝자리가 1과 3 인경우는 각각 1개(21) , 2개(43,23)이 있다. 1) 끝자리 0일 경우, 가능한 수는 1개, 1 =>dp[i][j]=dp[i-1][j+1] 2) 끝자리 1~8일경우, 가능한 수는 2개 n-1,n+1 => dp[i][j]=dp[i-1][j-1]+dp[i-1][j+1] 3) 끝자리 9일 경우, 가능한 수는 1개, 8 => dp[i][j]=dp[i-1][j-1] |
2. 풀이방법
1. [python] dp
#쉬운 계단 수
#https://www.acmicpc.net/problem/10844
import sys
sys.stdin = open("input.txt","r")
n=int(input())
dp=[[0]*10 for _ in range(n+1)]
mod=1000000000 #저장과정에서 int값 초과할 수 있어서
for i in range(1,10): #일의 자리 채우기
dp[1][i]=1
for i in range(2,n+1):
for j in range(10):
if j==0:
dp[i][j]=dp[i-1][j+1]%mod #범위초과 방지를 위해 중간과정에도 mod필요
elif j==9:
dp[i][j]=dp[i-1][j-1]%mod
else:
dp[i][j]=dp[i-1][j-1]+dp[i-1][j+1]%mod
print(sum(dp[n])%mod)
3. 오답원인
4. 알게된 점
'PS > BOJ' 카테고리의 다른 글
[백준] 일곱난쟁이 (0) | 2020.10.01 |
---|---|
[백준] 수 이어 쓰기 1 (0) | 2020.10.01 |
[백준] 조합 0의 개수 (0) | 2020.09.30 |
[백준] 2진수 8진수 (0) | 2020.09.30 |
[백준] 골드바흐 파티션 (0) | 2020.09.30 |
Comments