sm 기술 블로그

131. 1932(정수 삼각형) 본문

문제/백준_파이썬

131. 1932(정수 삼각형)

sm_hope 2022. 7. 3. 23:26
import sys
input = sys.stdin.readline

N = int(input())
triangle = [list(map(int,input().split())) for _ in range(N)]

sum = 0
result = []

for i in range(1,N):
  for j in range(0,i+1):
    if(i == 1):
      triangle[i][j] += triangle[0][0]
      continue
    
    if(j == 0):
      triangle[i][j] += triangle[i-1][0]
      continue
    
    if(j == i):
      triangle[i][j] += triangle[i-1][j-1]
      continue
     
    triangle[i][j] += max(triangle[i-1][j-1],triangle[i-1][j]) 

print(max(triangle[N-1]))

문제요약

N층 까지 있는 정수 삼각형에 값을 주는데 아래층으로 내려올 때 선택된 수의 합이 최대인 경우를 구하라.

설명

다음과 같이 차례로 누적합을 구해 나가면서 최종에 도달 했을 때 최대 값을 고르면 된다.

if(i == 1):
      triangle[i][j] += triangle[0][0]
      continue

 

두번째 케이스 부터 시작하는데 맨 처음( 3과 8이 나오는 부분)에는 전에 값이 하나밖에 없으므로 그 값을 바로 더한다.

if(j == 0):
      triangle[i][j] += triangle[i-1][0]
      continue

현재 테스트 케이스의 인덱스가 0인 값은 무조건 전 케이스의 인덱스가 0인 값을 더해야 한다.

if(j == i):
      triangle[i][j] += triangle[i-1][j-1]
      continue

현재 테스트 케이스의 인덱스가 마지막인 값은 무조건 전 케이스의 인덱스의 마지막 값을 더해야 한다.

    triangle[i][j] += max(triangle[i-1][j-1],triangle[i-1][j])

위에 모두 해당 되지 않는 경우 전 케이스 두 값 중 최대값을 찾아서 그 값을 더하고 덮어 씌우면 된다.

'문제 > 백준_파이썬' 카테고리의 다른 글

133. 1463(1로 만들기)  (0) 2022.07.04
132. 2579(계단 오르기)  (0) 2022.07.04
130. 1149(RGB 거리)  (0) 2022.07.03
129. 1912(연속합)  (0) 2022.07.03
128. 9461 (파도반 수열)  (0) 2022.07.03
Comments