문제
철수는 계단을 오를 때 한 번에 한 계단 또는 두 계단씩 올라간다. 만약 총 4계단을 오른다면 그 방법의 수는
1+1+1+1, 1+1+2, 1+2+1, 2+1+1, 2+2 로 5가지이다.
그렇다면 총 N계단일 때 철수가 올라갈 수 있는 방법의 수는 몇 가지인가?
[입력설명]
첫째 줄은 계단의 개수인 자연수 N(3≤N≤45)이 주어집니다.
[출력설명]
첫 번째 줄에 올라가는 방법의 수를 출력합니다.
입력예제 1
7
출력예제 1
21
문제풀이
계단을 한칸 또는 두칸만 갈수 있다!!
1번 계단으로 갈 수 방법의 수는 1
- 한칸 오름
2번 계단으로 갈 수 있는 방법의 수는 2
- 두칸 오름
그렇다면 3번 계단은 ?
3번 계단으로 갈수 있는 방법의 수 중 끝이 한칸 오르는
- 2번에서 오는 경우 ->> 2번 계단으로 갈 수 있는 방법의 수는 2
3번 계단으로 갈수있는 방법의 수 중 끝이 두칸으로 오르는
- 1번에서 오는 경우 ->> 1번 계단으로 갈 수 방법의 수는 1
#계단을 한번에 하나, 또는 두개만 오르르 수 있는 경우
n = int(input())
dy = [0] * (n + 1)
dy[1] = 1 #1번 계단을 올라갈 수 있는 방법의 수
dy[2] = 2 #2번 계단을 올라갈 수 있는 빙법의 수
#3부터 n까지 구한다
for i in range(3, n+1) :
#dy[3] = dy[2] + dy[1]
dy[i] = dy[i-1] + dy[i-2]
print(dy[n])
추가
계단을 한칸 또는 두칸 또는 세칸 갈수 있다!!
1번 계단으로 갈 수 방법의 수는 1
- 한칸 오름
2번 계단으로 갈 수 있는 방법의 수는 2
- 두칸 오름
그렇다면 3번 계단은 ?
3번 계단으로 갈수 있는방법의 수 중 한칸 오르는 경우
- 2번에서 오는 경우 ->> 1번 계단으로 갈 수있는 방법의 수 1
3번 계단으로 갈수있는 방법의 수 중 두칸 오르는 경우
- 1번에서 오는 경우 ->> 2번 계단으로 갈 수있는 방법의 수 2
3번 계단으로 갈수 있는 방법의 수 중 세칸 오르는 경우
- 0번에서 오는 경우 ->> 0번 계단으로 갈 수있는 방법의 수 1
#계단을 한번에 하나, 또는 두개 또는 세개만 오르르 수 있는 경우
n = int(input())
dy = [0] * (n + 1)
dy[0] = 1 #1번 계단을 올라갈 수 있는 방법의 수
dy[1] = 1 #2번 계단을 올라갈 수 있는 빙법의 수
dy[2] = 2 #0에서 오기(세개 오름), 1에서 오기(2개 오름), 2에서 오기(1개 오름)
#3부터 n까지 구한다
for i in range(4, n+1) :
#dy[3] = dy[2] + dy[1] + dy[0]
dy[i] = dy[i-1] + dy[i-2] + dy[i-3]
print(dy[n])
'코테풀이 > DP' 카테고리의 다른 글
[백준/인프런 | 골드3] 가장높은탑쌓기(LIS 응용 / 다시풀기) (0) | 2022.06.21 |
---|---|
[백준 | 골드4] 14002번: 가장 긴 증가하는 부분 수열 4 (0) | 2022.04.27 |
[백준 | 실버2] 11053본 가장 긴 증가하는 부분 수열(LIS) (0) | 2022.04.25 |
[프로그래머스 | 3단계] 멀리뛰기 (0) | 2022.04.22 |
[인프런] 네트워크 선 자르기(다이나믹 프로그래밍) (0) | 2022.04.22 |