[Python] 백준 1932번: 정수 삼각형

https://www.acmicpc.net/problem/1932

풀이

1부터 n번째 줄까지 정삼각형 형태의 배열이므로 j의 범위를 i+1로 해서 순회
한줄씩 내려오면서 이전값과 현재값을 더했을 때의 최대값을 선택하면서 내려오면 된다.
이전 값은 현재값을 기준으로 바로 위에서 내려올 경우와 왼쪽 위에서 내려올 경우를 생각할 수 있다.
바로 위에서 내려올 경우는 i==j 라고 할 수 있고, 이 경우 오른쪽에서 내려올 수 있는 숫자가 없으므로 right=0이 된다.
왼쪽 위에서 내려올 경우는 j==0 라고 할 수 있고, 이 경우 왼쪽에서 내려올 수 있는 숫자가 없으므로 left=0이 된다.

코드

import sys
input = sys.stdin.readline
n=int(input())
maps = [list(map(int,input().split())) for _ in range(n)]

for i in range(1, n):
    for j in range(i+1):
        # 왼쪽 위에서 내려오는 경우
        if j==0:
            left = 0
        else:
            left = maps[i-1][j-1]
        # 바로 위에서 내려오는 경우
        if i==j:
            right = 0
        else:
            right = maps[i-1][j]
        maps[i][j] = maps[i][j] + max(right, left)
print(max(maps[-1]))

좋은 웹페이지 즐겨찾기