import sys
n = int(sys.stdin.readline().rstrip())
stairs = [int(sys.stdin.readline().rstrip()) for _ in range(n)]
if n == 1:
print(stairs[0])
elif n == 2:
print(stairs[0] + stairs[1])
elif n == 3:
print(max(stairs[0] + stairs[2], stairs[1] + stairs[2]))
else:
upStair = [0 for _ in range(n)]
upStair[0] = stairs[0]
upStair[1] = stairs[0] + stairs[1]
upStair[2] = max(stairs[0] + stairs[2], stairs[1] + stairs[2])
for i in range(3, n):
upStair[i] = max(stairs[i] + upStair[i-2], stairs[i] + upStair[i-3] + stairs[i-1])
print(upStair[n-1])
stairs
배열에 계단 점수를 넣는다.마지막 도착 계단은 반드시 밟아야 한다
라는 조건을 적용해야한다. for문을 반복할 때, 마지막 칸은 stairs[i]
이다.stairs[i] + upStair[i-3] + stairs[i-1]
이다.stairs[i] + upStair[i-2]
가 답이다.upStair
배열에 넣어준다.import sys
input = sys.stdin.readline
N = int(input())
dp = [0 for _ in range(N+3)]
arr = [0 for _ in range(N+3)]
for k in range(1,N+1):
arr[k] = int(input())
dp [1] = arr[1]
dp [2] = arr[1] + arr[2]
dp [3] = max(arr[1] + arr[3] ,arr[2] + arr[3])
for i in range(4, N+1):
dp[i] = max( dp[i-3] + arr[i-1] + arr[i] , dp[i-2] + arr[i] )
print(dp[N])
내가 푼 풀이의 문제는 n=1, n=2, n=3 일 경우, index를 벗어나는 오류가 발생했다. 따라서 조건을 걸어 각 경우에 대해 답을 출력했다.
별로 좋지 않은 코드인 것 같다.
다른 사람의 풀이를 참고하니, arr의 3번째 인자까지 0을 넣어주고 시작한다. 그럼 분기를 나누지 않아도 정답을 구할 수 있다!