Algorithm Study/Python

[백준 파이썬] # 2579 계단 오르기

728x90
반응형

Silver III

# 2579 계단 오르기

링크 : https://www.acmicpc.net/problem/2579

 

2579번: 계단 오르기

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

www.acmicpc.net

 

풀이

N = int(input())
li = [0]*300  # [0 for i in range(N)] 적용 시 indexerror 발생
dp = [0]*300
for i in range(N):
    nums = int(input())
    li[i] = nums

dp[0] = li[0]
dp[1] = li[0]+li[1]
dp[2] = max(li[1]+li[2], li[0]+li[2])
for i in range(3, N):
    dp[i] = max(li[i]+li[i-1]+dp[i-3], li[i]+dp[i-2])

print(dp[N-1])

 

후기

  • 다른 분의 풀이를 통해서 어림잡아 이해해볼 수 있었다.
  • 혼자서 다시 시도해볼 때 indexerror가 발생했다. N이 1일 경우 li[2]를 참조할 수 없는 오류가 발생하기 때문이다.
  • 때문에 li를 입력값의 저장공간으로 활용할 수 있도록 최대 공간을 확보한다 (N은 300이하의 수)
  • range(3, N)일 때, N이 3보다 작게 되면 range 문은 동작하지 않고 종료된다.