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