[BOJ]2579:階段を登る
🔒 例
>> 6
>> 10
>> 20
>> 15
>> 25
>> 10
>> 20
75
🔧 に答える
1. n = int(sys.stdin.readline().rstrip())
2. stairs = [10, 20, 15, 25, 10, 20] 리스트 저장
3. '마지막 도착 계단은 반드시 밟아야 한다' -> 뒤에서 마지막 계단을 기준으로 생각
ㄴ 3계단 연속 밟기 X
3.1 n번째 계단 + (n-1) 계단 => stairs[n] + stairs[n-1] + dp[n-3]
3.2 n번째 계단 + (n-2) 계단 => stairs[n] + dp[i-2]
4. 시작점은 계단에 포함되지 않는다. -> 시작값 = 첫번째 계단 값
5. n에 따라 dp 예외처리 !
🔑 答案用紙
import sys
n = int(sys.stdin.readline().rstrip())
stairs = [0]
for _ in range(1, n + 1):
stairs.append(int(sys.stdin.readline().rstrip()))
# n이 3이하일 경우, 계단 합 = 최댓값
if n < 4:
print(sum(stairs))
else:
dp = [0 for _ in range(n + 1)]
dp[1] = stairs[1]
dp[2] = dp[1] + stairs[2]
# n이 4이상일 때를 위한 dp 값이므로 3계단 연속 불가 조건 고려하여 작성
dp[3] = max(stairs[1], stairs[2]) + stairs[3]
# n번째 계단 + (n-1) 계단 + dp[n-3]
# n번째 계단 + dp[n-2]
for i in range(4, n + 1):
dp[i] += (stairs[i] + max(dp[i - 2], dp[i - 3] + stairs[i - 1]))
print(dp[n])
💡 コンセプト
Reference
この問題について([BOJ]2579:階段を登る), 我々は、より多くの情報をここで見つけました https://velog.io/@ohhj1999/BOJ-2579テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol