Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
51 changes: 51 additions & 0 deletions 이티유진/2579_계단 오르기.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
import sys

#계단 개수 n 입력받기
n = int(sys.stdin.readline())

#각 계단 점수 리스트에 입력받기
s = [0] * 1000 # s = [] IndexError: 빈 리스트에 인덱스 지정하여 오류 -> 1. append 함수 이용 2. 리스트 미리 설정
for i in range(n):
s[i] = int(sys.stdin.readline())

#점수 총합 최댓값 구하는 리스트
dp = [0] * 1000

#계단 1개일 때
dp[0] = s[0] #점수 총합 최댓값 = 첫번째 계단 점수

#계단 2개일 때
dp[1] = s[0] + s[1] #점수 총합 최댓값 = 첫번째 계단 점수 + 두번째 계단 점수

#계단 3개 이상인 경우
for i in range(2,n):
dp[i] = s[i] + max(dp[i-3]+s[i-1] , dp[i-2])

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

3번째 계단부터 dp 점화식 이용한 점 좋습니다! 👍 수고하셨습니다 😄


#계단 n개일 때 점수 총합 최댓값 출력
print(dp[n-1])

'''
ex)계단 3개일 때
i) 3<-2<-시작
ii) 3<-1<-시작
dp[2] = s[2] + max(s[1],s[0])

ex)계단 4개일 때
i) 4<-3<-1<-시작
ii) 4<-2<-1<-시작
iii) 4<-2<-시작
dp[3] = s[3] + max(s[0]+s[2], s[0]+s[1])
dp[3] = s[3] + max(dp[0]+s[2], dp[1])

ex)계단 6개일 때
i) 6<-5<-3<-2<-시작
ii) 6<-5<-3<-1<-시작
i, ii: 6<-5<-(n=3일 때 계단 오르기 경우의 수)
-----------------------------------------
iii) 6<-4<-3<-1<-시작
iv) 6<-4<-2<-1<-시작
v) 6<-4<-2<-시작
iii, iv, v: 6<-(n=4일 때 계단 오르기 경우의 수)
dp[5] = s[5] + max(dp[2]+s[4], dp[3])

'''