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

Jonie Kwon·2022년 4월 18일
0

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

풀이

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

코드

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]))
profile
메모하는 습관

0개의 댓글