CodingTest/Baekjoon

[baekjoon] 백준 2579번(파이썬): 계단 오르기

JunJangE 2021. 11. 21. 15:40

문제

 

2579번: 계단 오르기

계단 오르기 게임은 계단 아래 시작점부터 계단 꼭대기에 위치한 도착점까지 가는 게임이다. <그림 1>과 같이 각각의 계단에는 일정한 점수가 쓰여 있는데 계단을 밟으면 그 계단에 쓰여 있는 점

www.acmicpc.net

알고리즘

- dp를 통해 계단의 점수를 리스트로 표현한다.

- 연속으로 세 개의 계단을 밟는 경우와 두 계단을 한 번에 오르는 경우를 비교하여 dp 리스트의 계단의 점수를 넣는다.

코드

import sys

n = int(sys.stdin.readline())
m = [0] * 301

for k in range(n):
    m[k] = int(sys.stdin.readline())

dp = [0] * 301 # 계단
dp[0] = m[0] # 첫 번째 계단
dp[1] = m[0] + m[1] # 두 번째 계단
dp[2] = max(m[1] + m[2], m[0] + m[2]) # 연속으로 세 개의 계단을 밟는 경우와 두 계단을 한번에 오르는 경우를 비교

# 반복문을 통해 계단을 오른다.
for i in range(3, n + 1):
    dp[i] = max(dp[i - 3] + m[i - 1] + m[i], dp[i - 2] + m[i]) # 연속으로 세 개의 계단을 밟는 경우와 두 계단을 한번에 오르는 경우를 비교

print(dp[n - 1])

github

 

GitHub - junjange/CodingTest: 내가 푼 코딩 테스트 문제와 해결법

내가 푼 코딩 테스트 문제와 해결법. Contribute to junjange/CodingTest development by creating an account on GitHub.

github.com