파이썬 문법이 익숙하지 않아서 애먹었다.
우선 어떻게 해결할지 고민했는데 처음엔 제일 위에서 부터 큰 숫자를 찾으려 했으나 왼쪽 혹은 오른쪽 대각선만 선택할수 있어서 다른 방법을 찾아야했다.
일단 입력을 다 배열로 받고
[7]
[3,8]
[8,1,0]
[2,7,4,4]
[4,5,2,6,5]
위에서 부터 대각선에 해당하는 값을 아래에 더해주며 내려온다.
그럼
---
[7]
[10,15]
---
이런식으로 시작을 할텐데
문제는 3,8 에서 8,1,0이 있는 행으로 내려올때 1이 3과 8 양쪽의 대각선에 해당된다.
이럴 땐 max로 해결해줌
[7]
[10,15]
[18,max([11],[16]),15]
---
이런식으로 쭉 내려오다 보면 제일 마지마지막 줄에서 가장 큰값이 최댓값이 되겠다
import sys
t = int(sys.stdin.readline())
n=[list(map(int,sys.stdin.readline().split())) for _ in range(0,t)]
dp=[]
for i in range(1,t):
for j in range(len(n[i])):
if j == 0 :
n[i][j] += (n[i-1][j])
elif j==i:
n[i][j] +=(n[i-1][j-1])
else :
n[i][j] += (max(n[i-1][j],n[i-1][j-1]))
print(max(n[t-1]))
'알고리즘' 카테고리의 다른 글
백준 1110번 파이썬 : 더하기 사이클 (0) | 2020.08.14 |
---|---|
백준 10952번 파이썬 (python) : A+B - 4 (0) | 2020.08.14 |
백준 10952번 파이썬 (python) : A+B - 5 (0) | 2020.08.14 |
[백준 2750] 파이썬 삽입정렬 (0) | 2020.02.12 |
백준 9416번 파이썬 (python) : 파도반 수열 (0) | 2020.01.27 |
댓글