[Python] 백준 1932: 정수 삼각형
https://www.acmicpc.net/problem/1932
1932번: 정수 삼각형
첫째 줄에 삼각형의 크기 n(1 ≤ n ≤ 500)이 주어지고, 둘째 줄부터 n+1번째 줄까지 정수 삼각형이 주어진다.
www.acmicpc.net
ANS
N = int(input())
triangle = [list(map(int,input().split())) for _ in range(N)]
#목표는 그때그때 작은 것을 찾아서 저장해주는 것. (행+1, 열)과 (행+1, 열+1) 중에서 큰 값 찾기!
#삼각형의 제일 왼쪽과 오른쪽은 특수하게 처리해주어야 한다. max값을 사용해서 비교하지 않는다.
r = 0
c = 0
sumV = triangle[r][c]
for i in range(1,N): #행
for j in range(len(triangle[i])): #열
if j == 0: #맨 왼쪽에 있는 경우
triangle[i][j] = triangle[i][j] + triangle[i-1][0]
elif j == len(triangle[i])-1: #맨 오른쪽에 있는 경우
triangle[i][j] = triangle[i][j] + triangle[i-1][j-1]
else:
triangle[i][j] = max(triangle[i][j] + triangle[i-1][j], triangle[i][j]+triangle[i-1][j-1])
print(max(triangle[N-1]))
TC에서 주어진 정수 삼각형을 이용해서 해당 삼각형의 행-열에는 어떠한 값을 더하게 되는지 규칙을 찾는 식으로 접근을 했다. 맨 왼쪽, 맨 오른쪽 요소는 max값으로 해당 값을 저장하지 않아도 된다는 것을 알아냈으며, 그 외의 요소들은 max값을 넣어주어야 한다는 것을 알게 되었다. 시간이 부족할 수 있기 때문에 따로 여분의 리스트를 만들지 않았고 triangle 리스트를 돌면서 값 갱신을 시켜주고자 했다. 마지막 행의 max값이 우리가 원하는 값!

'알고리즘 > 백준' 카테고리의 다른 글
| [Python] 백준 1788: 피보나치 수의 확장 (0) | 2023.04.17 |
|---|---|
| [Python] 백준 1463: 1로 만들기 (0) | 2023.04.13 |
| [Python] 백준 14499: 주사위 굴리기 (0) | 2023.04.06 |
| [Python] 백준 1344: 축구 (0) | 2023.04.05 |
| [Python] SWEA 5188: 최소합, 5189: 전자카트 (0) | 2023.03.27 |
TAGS.
