Skip to content

Commit ec280ad

Browse files
authored
Merge pull request #69 from zaqquum/main
HONGJOO/10월 2주차 / 2문제
2 parents 042bacb + 90ea849 commit ec280ad

File tree

2 files changed

+102
-0
lines changed

2 files changed

+102
-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])

Hongjoo/백준/정수삼각형.py

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
"""
2+
-top-dowm 방향으로 내려올때 , 각 경로에서 요소들의 최대합을 리스트 dp 에 누적시키기
3+
1, 2중 for 문
4+
2. 모든 경로에 대해 숫자의 누적합을 dp 리스트에 넣기
5+
- 맨 left , right : idx = 0 , -1 경우
6+
=> dp[stage][0] =dp[stage-1][0] + graph[stage][0]
7+
=> dp[stage][-1] =dp[stage-1][-1] + graph[stage][-1]
8+
- 가운데 [idx : 1~ state-1]
9+
=> dp[stage][idx] = max(dp[stage-1][idx] + graph[stage][idx-1] , dp[stage-1][idx] + graph[stage][idx] )
10+
11+
[7]
12+
[10,15]
13+
8 1 0
14+
[18] , [11vs 16 = 16] , [15+0]
15+
2 7 4 4
16+
[18 +2] [18 + 7 vs 16 + 7] [] [15+ 4]
17+
18+
"""
19+
import sys
20+
#1. input
21+
n = int(sys.stdin.readline())
22+
graph= []
23+
for i in range(n) :
24+
tmp = list(map(int, sys.stdin.readline().split()))
25+
graph.append(tmp)
26+
# 2. Initialize List dp
27+
28+
dp = [graph[0]]
29+
30+
#3. dynamic programing
31+
32+
for stage in range(1,n) :
33+
tmp = []
34+
num_list = graph[stage] # add
35+
36+
for idx in range(len(num_list)) :
37+
total_sum = 0
38+
if idx == 0 : # left
39+
total_sum = dp[stage-1][0] + num_list[0]
40+
elif idx < len(num_list)-1: # middle
41+
total_sum = max(dp[stage-1][idx-1] + num_list[idx], dp[stage-1][idx] + num_list[idx])
42+
else: # idx == -1: #right
43+
total_sum = dp[stage-1][-1] + num_list[-1]
44+
tmp.append(total_sum)
45+
46+
dp.append(tmp)
47+
48+
49+
answer = max(dp[-1])
50+
print(f"{answer}")

0 commit comments

Comments
 (0)