728x90
반응형
https://www.acmicpc.net/problem/1932
1932번: 정수 삼각형
문제 7 3 8 8 1 0 2 7 4 4 4 5 2 6 5 위 그림은 크기가 5인 정수 삼각형의 한 모습이다. 맨 위층 7부터 시작해서 아래에 있는 수 중 하나를 선택하여 아래층으로 내려올 때, 이제까지 선택된 수의 합이 최대가 되는 경로를 구하는 프로그램을 작성하라. 아래층에 있는 수는 현재 층에서 선택된 수의 대각선 왼쪽 또는 대각선 오른쪽에 있는 것 중에서만 선택할 수 있다. 삼각형의 크기는 1 이상 500 이하이다. 삼각형을 이루고 있는 각 수는
www.acmicpc.net

더보기



문제 풀이
입력을 아래와 같이 했을 경우
7
3 8
8 1 0
2 7 4 4
4 5 2 6 5
최댓값은 아래의 그림과 같습니다.

이 그림을 뒤집어서 보면 문제를 풀기 쉽습니다.

내 코드
# 정수 삼각형
# 역순에서 계산해 나간다.
def solve(triangle):
answer = [[] for _ in range(len(triangle))]
# 삼각형을 뒤집어서 한 단계씩 내려간다.
for i in range(len(triangle) - 1, - 1, - 1):
# 어떤 단계인지에 따라서 나뉜다.
for j in range(len(triangle[i])):
# 맨 처음일 때는 각각을 answer 리스트에 넣어야 한다.
if i == len(triangle) - 1:
answer[i].append(triangle[i][j])
# 맨 처음이 아닐 시 최대값을 골라서 넣는다.
else:
answer[i].append(triangle[i][j] + max(answer[i + 1][j], answer[i + 1][j + 1]))
# 정답 출력
print(answer[0][0])
if __name__=='__main__':
N = int(input())
triangle = []
for i in range(N):
triangle.append(list(map(int, input().split())))
solve(triangle)
|

반응형
'알고리즘 > 백준' 카테고리의 다른 글
[python/1463]1로 만들기 (0) | 2020.04.21 |
---|---|
[python/2579]계단 오르기 (0) | 2020.04.18 |
[python/1149]RGB거리 (0) | 2020.04.14 |
[python/9461]파도반 수열 (0) | 2020.04.11 |
[python/1904]01타일 (0) | 2020.04.09 |