Algorithm/백준_생각정리
백준_22236_가희와 비행기(python)
코친남
2023. 6. 28. 13:36
★ 접근
적당히 큰 입력 값의 크기, 구해야 하는 모든 경우의 수들을 종합적으로 봤을 때 바로 다이나믹 프로그래밍을 떠올렸다.
★ 풀이
1. 비행을 할 때 한 지점에 도달할 수 있는 경우의 수는 이전 x좌표에서 아래에서 위로 올라온 것과 이전 x좌표에서 위에서 아래로 내려온 경우의 수를 합친 경우이다.
2. 1번이 전부이다.... 항상 dp가 그렇죠 뭐..... 점화식만 세우면 끝이니... 근데 이 정도로 간단할 줄은.... 그래도 골드4인데... 황당...
- 코드
import sys
input = sys.stdin.readline
d,m = map(int,input().split())
dp = [[0] * 4001 for _ in range(4001)]
dp[1][1] = 1
for i in range(2,d): # d-1 까지만 가는 이유 마지막 d일때는 그냥 직전 위치 높이 1에서 내려오는 방법밖에 없으니
for j in range(1,i+1): # 해당 좌표까지는 해당 높이까지만 올라갈 수 있으므로 i+1까지 가준다. 1부터시작해야지
dp[i][j] += (dp[i-1][j-1] + dp[i-1][j+1]) % m
print(dp[d-1][1])