▶문제
▶풀이
n=int(input())
d=[]
for i in range(n):
d.append(list(map(int, input().split())))
for i in range(1,n):
for j in range(len(d[i])):
if j==0:
d[i][j]=d[i][j]+d[i-1][j]
elif j==len(d[i])-1:
d[i][j]=d[i][j]+d[i-1][j-1]
else:
d[i][j]=max(d[i-1][j-1],d[i-1][j])+d[i][j]
print(max(d[n-1]))
- 삼각형의 각 요소는 두 개의 바로 위 요소 중 더 큰 값에 현재 요소의 값을 더한 것
- 각 요소에 대해 최대 경로합을 계산하기 위해 DP 테이블을 설정
- 삼각형을 위에서 아래로 내려가면서 각 위치의 최대 경로합을 업데이트하여 가장 마지막 줄에서 최댓값을 찾으면 전체 경로에서의 최대 합을 구할 수 있음
n = int(input())
d = []
for i in range(n):
d.append(list(map(int, input().split())))
삼각형의 행 수를 입력받아 d에 저장한다. 그 후 map 함수를 이용해 정수형으로 변환한다.
for i in range(1, n):
for j in range(len(d[i])):
if j == 0:
d[i][j] = d[i][j] + d[i-1][j]
elif j == len(d[i]) - 1:
d[i][j] = d[i][j] + d[i-1][j-1]
else:
d[i][j] = max(d[i-1][j-1], d[i-1][j]) + d[i][j]
삼각형의 각 행을 처리하면서, 현재 위치의 값을 업데이트한다. 각 요소는 위쪽 요소 중 적절한 값을 선택하여 더해 최대 경로합을 구한다.
print(max(d[n-1]))
삼각형의 마지막 행에서 가장 큰 값을 찾아 출력한다.
'2024 SWLUG > 백준' 카테고리의 다른 글
2주차_백준(2) - 유기농 배추 (0) | 2024.10.01 |
---|---|
2주차_백준(1) - Fly me to the Alpha Centauri (0) | 2024.10.01 |
1주차_백준(1) - 신나는 함수 실행 (0) | 2024.09.13 |
4주차_백준 (2) - 분해합 (0) | 2024.05.22 |
4주차_백준 (1) - 블랙잭 (0) | 2024.05.22 |