실버 3
2579번: 계단 오르기
계단 오르기 게임은 계단 아래 시작점부터 계단 꼭대기에 위치한 도착점까지 가는 게임이다. <그림 1>과 같이 각각의 계단에는 일정한 점수가 쓰여 있는데 계단을 밟으면 그 계단에 쓰여 있는 점
www.acmicpc.net
문제 풀이
계단이 3개 보다 작으면 모든 계단을 밟는 것이 무조건 최대이다.
하지만 3개 이상일 경우엔 연속으로 세 개의 계단을 밟을 수 없기 때문에 두 가지 경우로 나누어 생각을 해볼 수 있다.
1) 한 칸 이전(n-1)에서 n번째 칸으로 온 경우
연속 두 개의 계단을 밟은 셈이므로 n-2칸은 밟을 수 없다.
따라서 n-3까지의 최대 점수에 한 칸 이전 계단의 비용과 현재 계단의 점수를 더한다.
2) 두 칸 이전(n-2)에서 n번째 칸으로 온 경우
연속이 되지 않기 때문에 그냥 n-2까지의 최대 점수에 현재 계단 점수를 더한다.
이 두개의 경우 중 큰 값이 n 번째 계단까지의 최대 점수가 된다.
코드
n = int(input())
stair = []
for _ in range(n):
stair.append(int(input()))
cost = [0] * (n+1)
if n >= 1:
cost[1] = stair[0]
if n >= 2:
cost[2] = stair[0]+stair[1]
for i in range(3, n+1):
a = cost[i - 3] + stair[i - 2] + stair[i - 1] # 한 칸 이 전에서 온 경우
b = cost[i - 2] + stair[i - 1] # 두 칸 이 전에서 온 경우
cost[i] = max(a, b)
print(cost[n])
728x90
'Algorithm > Problem' 카테고리의 다른 글
[Baekjoon] 2156번 : 포도주 시식 (0) | 2022.01.21 |
---|---|
[Baekjoon] 1463번 : 1로 만들기 (0) | 2022.01.20 |
[Baekjoon] 1149번 : RGB거리 (0) | 2022.01.20 |
[Baekjoon] 9461번 : 파도반 수열 (1) | 2022.01.19 |
[Baekjoon] 1904번 : 01타일 (0) | 2022.01.19 |