현제의 현재이야기
<2022모각코/TIL> [백준/python] 2579- 계단오르기 본문
n = int(input())
stair = [int(input()) for _ in range(n)]
dp = [0] * n
dp[0] = stair[0]
if n > 1:
dp[1] = stair[0] + stair[1]
if n > 2:
dp[2] = max(stair[1] + stair[2], stair[0] + stair[2])
if n > 3:
for i in range(3, n):
dp[i] = max(dp[i - 3] + stair[i - 1] + stair[i], dp[i - 2] + stair[i])
print(dp[n-1])
알고리즘:
1. Stair 배열을 받고, DP배열도 n개로 만듦
2. dp[1]은 2번째 칸이므로 그냥 1번쨰 2번째 두개 더한 것이 최대
3. dp[2] 는 23번째 칸과 13번째 칸의 최대를 구함
4. dp[3]부터는 두가지 로 나눔. 첫번째는 i번째 칸의 전을 밟은 것과, i번째 칸의 전전을 밟은 것. 전을 밟은 것은 전전을 밟을 수 없기때문에 dp[i - 3]을 더해주고, 전전칸을 밟는 것은 그냥 dp[i - 2] 를 해줆.
dp를 정확하게 이해할 수 있었던 문제였다.
'algorithm > HUFS 2022 하계 모각코' 카테고리의 다른 글
[백준/python] 11048- 이동하기 (0) | 2022.08.26 |
---|---|
<2022모각코/TIL> [백준/python] 2156- 포도주 시식 (0) | 2022.08.20 |
<2022모각코/TIL> [백준/python] 2210 - 숫자판 점프 (0) | 2022.08.14 |
<2022모각코/TIL> [백준/python] 5566 - 주사위 게임 (0) | 2022.08.10 |
<2022모각코/TIL> 코드트리 - 그래프 탐색 (0) | 2022.08.07 |
Comments