https://www.acmicpc.net/problem/2579
2579번: 계단 오르기
계단 오르기 게임은 계단 아래 시작점부터 계단 꼭대기에 위치한 도착점까지 가는 게임이다. <그림 1>과 같이 각각의 계단에는 일정한 점수가 쓰여 있는데 계단을 밟으면 그 계단에 쓰여 있는 점
www.acmicpc.net
아이디어
N이 1이나 2일 경우를 제외한 계단 오르는 방법이 키워드이다.
- 1이나 2일 경우 아래와 같이 이동한 값이 항상 max 값이다.
N > 2일 경우는 두 가지 경우의 수가 있다.
- 이전 칸에서 2칸 뛰어서 도착하는 경우
- 이 경우 연속되는 칸을 밟을 일이 없으므로 dp[i-2] + stairs[i]를 하면 구할 수 있다.
- 이전 칸에서 1칸 뛰어서 도착하는 경우
- 이 경우 연속되는 칸을 밟을 우려가 있기 때문에 dp[i-3] + stairs[i-1] + stairs[i]를 하면 구할 수 있다.
참고로 연속되는 칸을 밟은 것은 아래와 같은 상황을 말한다. (문제 조건에 명시되어 있다.)
전체 코드
N = int(input())
stairs = [int(input()) for _ in range(N)]
dp = [0] * N
if N <= 2: print(sum(stairs))
else:
dp[0] = stairs[0]
dp[1] = stairs[0] + stairs[1]
for i in range(2, N):
dp[i]=max(dp[i-3] + stairs[i-1] + stairs[i], dp[i-2] + stairs[i])
print(dp[-1])
'Coding Test > Python' 카테고리의 다른 글
[백준/백트래킹] 15650번: N과 M(2) (실버3, python) (0) | 2024.01.29 |
---|---|
[백준/백트래킹] 15649번: N과 M(1) (실버3, python) (1) | 2024.01.29 |
[백준/dp] 1904번: 01타일 (실버3, python) (1) | 2024.01.28 |
[프로그래머스] 큰 수 만들기 (level2, python) (0) | 2024.01.23 |
[프로그래머스] 체육복(level1, python) (0) | 2024.01.23 |