Skip to content

Commit fb3b0f6

Browse files
committed
[BOJ]#2579_계단오르기/ Silver3 / 실패
https://www.acmicpc.net/problem/2579
1 parent 997235e commit fb3b0f6

File tree

1 file changed

+52
-0
lines changed

1 file changed

+52
-0
lines changed

Hongjoo/백준/계단 오르기.py

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
'''
2+
1. 계단은 step +1 or step+2
3+
2. 연속된 세계 계단을 모두 밟으면 안됨 (1,2,3,x), 시작점은 계단 ㄴㄴ
4+
3.마지막 도착계단은 반드시 밟기
5+
6+
# flag
7+
이전 +1 :(new = 현 step +1 ) -> 안됨
8+
이전 +2or 1 : (new=현 step+2) -> 가능
9+
10+
dp[] : max 값만 넣기
11+
iteration 2
12+
dp[i] : Max(dp[i-1] + step[i]
13+
14+
'''
15+
# input
16+
import sys
17+
n = int(input())
18+
field = list()
19+
for _ in range(n):
20+
field.append(int(sys.stdin.readline()))
21+
# print(f"field { field} , {len(field)}")
22+
# step : n개 -> 0시작점+ 0~ n-1
23+
flag = 0 # dp[i-1]에서 온 경우 선택: 1 ,dp[i-2] 에서 온 경우 : 0
24+
dp = [0 for _ in range(n)]
25+
# print(f"dp {dp} , {len(dp)}")
26+
27+
if n == 1 :
28+
print(field[0])
29+
elif n== 2 :
30+
print(max(dp[0], 0)+ field[1])
31+
else : #n >= 3
32+
33+
dp[0] =field[0]# i=0 인 경우 -> dp[0] = 첫 번쨰 & ,flag = 0 (시작은 계단으로 안침)
34+
if dp[0] > 0 : # 이전 i-1= 0 을 참조한 경우
35+
flag= 1
36+
dp[1] = max(dp[0], 0)+ field[1]
37+
38+
39+
for i in range(2 , n) :
40+
if flag == 0 : # 이전 dp[i-2] 참조한 경우
41+
#dp[i] = max(dp[i-1] + field[i] ,dp[i-2] + field[i] )
42+
if dp[i-1] > dp[i-2] : # +1 선택
43+
flag = 1
44+
#+2 선택 -> flag = 0
45+
dp[i] = max(dp[i-1], dp[i-2]) + field[i]
46+
elif flag == 1 : # 이전 dp[i-1] 참조한 경우
47+
# 무조건 +2 만 가능 -> flag = 0
48+
flag = 0
49+
dp[i] = dp[i-2] + field[i]
50+
51+
#dp[-1] : 시작~ 도착 지점까지 얻을 수 있는 점수 최대값
52+
print(dp[-1])

0 commit comments

Comments
 (0)