[백준 1932 파이썬] 정수 삼각형

일단 해볼게·2023년 2월 6일
0

백준

목록 보기
100/132

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

# 정수 삼각형

import sys
input = sys.stdin.readline

n = int(input().rstrip()) # 삼각형의 크기
triangles = [list(map(int, input().rstrip().split())) for _ in range(n)]

for i in range(1, n):
    for j in range(len(triangles[i])):
        if j == 0: # 윗 줄의 0번째 열을 더한다.
            triangles[i][j] += triangles[i - 1][j]

        elif j == len(triangles[i]) - 1: # 윗줄의 마지막 열을 더한다.
            triangles[i][j] += triangles[i - 1][j - 1]

        else:
            triangles[i][j] += max(triangles[i - 1][j - 1], triangles[i - 1][j])
    
print(max(triangles[n - 1]))

처음에 낮은 행에서 마지막 행까지 더하려 했다. 그러면 마지막 행의 마지막 요소를 계산하는 방법을 따로 구현해야해서 풀이가 잘못 되었다는걸 깨달았다.

i = 1부터 시작해서 j의 인덱스에 따라 구현방식을 다르게 했다.

  • j가 0인 경우 : 윗 줄(i - 1)의 0번째 열밖에 없으니 그것을 더한다.
  • j가 마지막 인덱스인 경우 : 윗 줄(i - 1)의 마지막 인덱스(현재 줄보다 길이가 1 작으므로 j - 1)를 더한다.
  • 그 외 : 문제에 맞게 윗줄의 같은 열(i - 1, j)과 윗줄의 j - 1열(i - 1, j - 1)을 비교해 최대값을 더한다.
profile
시도하고 More Do하는 백엔드 개발자입니다.

0개의 댓글