사용 언어 - Python3
문제 - 계단 오르기
정답
DP 기초 문제 (정답 맞춘 여부 X)
1. dp = [0]*(n), 0으로 이루어진 리스트 dp 생성
2. 예외처리
계단이 애초에 두개 이하이면, 첫번째 계단+두번째 계단밖에 정답이 없으므로 sum(s)
3. 계단이 3개이상인 경우부터 dp에 값 입력
dp[i] = i까지의 계단 최대값
dp[0] = s[0]
dp[1] = s[0]+s[1]
dp[2]부터는 경우의 수가 늘어난다.
dp[i]=max(dp[i-3]+s[i-1]+s[i], dp[i-2]+s[i])
마지막 s[i]는 무조건 밟는다고 생각하고, 두가지의 경우를 비교해서 최대값을 현재의 dp에 저장한다.
- dp[i-3]+s[i-1]+s[i] = OXOO, i-3까지의 최대값 + i-1번째 계단값 + i번째 계단값
- dp[i-2]+s[i] = ?OXO, i-2까지의 최대값 + i번째 계단값
4. 가장 오른쪽에 있는 값이 최대값
n=int(input())
s=[int(input()) for _ in range(n)]
dp=[0]*(n)
if len(s)<=2:
print(sum(s))
else:
dp[0]=s[0]
dp[1]=s[0]+s[1]
for i in range(2,n):
dp[i]=max(dp[i-3]+s[i-1]+s[i], dp[i-2]+s[i])
print(dp[-1])
레퍼런스
- 동적계획법
한번 푼 문제는 다시 풀지 않는다!
- 정답 참고
- 정답 깃허브
'Algorithm > 동적계획법' 카테고리의 다른 글
[프로그래머스 lv 4] 사칙연산 (0) | 2023.06.07 |
---|---|
[프로그래머스 lv 3] 등굣길 (0) | 2023.06.02 |
[프로그래머스 lv 3] 정수 삼각형 (0) | 2023.06.02 |
다이나믹 프로그래밍? (0) | 2023.06.01 |
[Python3] 백준 1904번 01타일 (0) | 2023.04.06 |
댓글