-
백준_22236_가희와 비행기(python)Algorithm/백준_생각정리 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])
★ 회고
흠..... 항상 dp만 보면 일일이 손 코딩을 해서 점화식을 세우려고 한다 근데 이것은 문제의 난이도가 낮았을 때는 들어맞았는데 문제의 난이도가 올라갈 수록 손 코딩도 하기 어려워진다. 결국 생각하고 점화식을 세워야 한다.
dp는 풀어도 풀어도 느낌이 잘 안 온다... 열심히 하자!!
'Algorithm > 백준_생각정리' 카테고리의 다른 글
백준_20208_진우의 민트초코우유(python) (0) 2023.07.06 백준_17130_토끼가 정보섬에 올라온 이유 (python) (0) 2023.06.30 백준_21773_가희와 프로세스 1(python) (0) 2023.06.23 백준_1756_피자굽기 (python) (0) 2023.05.21 백준_16434_드래곤 앤 던전(python) (0) 2023.05.17