코딩테스트
[백준] 2579 | 계단 오르기 [파이썬/python]
사용할수없는닉네임이왜이렇게많지ㅠㅠ
2025. 4. 3. 02:00
728x90
문제
link: https://www.acmicpc.net/problem/2579
계단을 오르면서 얻을 수 있는 점수의 최댓값을 구하는 문제이다.
접근
DP를 이용해 문제를 풀었다.
계단마다 점수가 있고, 계단을 오르며 점수를 획득할 수 있다. 계단은 한번에 한 칸 또는 두 칸을 오를 수 있으며, 연속으로 세 칸을 밟을 수는 없다. 마지막 계단은 꼭 밟아야 한다.
마지막 계단에 꼭 도달해야 하므로, '이 계단에 도달하기 전에 어떤 계단을 밟았을까?' 시점에서 문제를 풀면 금방 점화식을 찾을 수 있다.
처음에 시작점이 첫 번째 계단인 것으로 잘못 이해해 틀린 답을 한 번 제출했다 ㅎㅎ; 시작점->첫 번째 계단->두 번째 계단->... 이다!
코드
import sys
input = sys.stdin.readline
N = int(input())
a = [int(input()) for _ in range(N)]
b = [0] * N
if N < 3:
print(sum(a))
else:
b[0] = a[0]
b[1] = b[0] + a[1]
for i in range(2, N):
b[i] = max(b[i-2] + a[i], b[i-3] + a[i-1] + a[i])
print(b[-1])
728x90