알고리즘/백준

[python/1932]정수 삼각형

(ㅇㅅㅎ) 2020. 4. 16. 22:34
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