Myo-Kyeong Tech Blog

[프로그래머스] Lv.3 정수 삼각형 (Python / Java) 본문

프로그래머스

[프로그래머스] Lv.3 정수 삼각형 (Python / Java)

myo-kyeong 2023. 8. 12. 21:59
728x90
반응형

https://school.programmers.co.kr/learn/courses/30/lessons/43105?language=python3 

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

문제 설명

위와 같은 삼각형의 꼭대기에서 바닥까지 이어지는 경로 중, 거쳐간 숫자의 합이 가장 큰 경우를 찾아보려고 합니다. 아래 칸으로 이동할 때는 대각선 방향으로 한 칸 오른쪽 또는 왼쪽으로만 이동 가능합니다. 예를 들어 3에서는 그 아래칸의 8 또는 1로만 이동이 가능합니다.

삼각형의 정보가 담긴 배열 triangle이 매개변수로 주어질 때, 거쳐간 숫자의 최댓값을 return 하도록 solution 함수를 완성하세요.

제한사항

  • 삼각형의 높이는 1 이상 500 이하입니다.
  • 삼각형을 이루고 있는 숫자는 0 이상 9,999 이하의 정수입니다.

입출력 예


문제 풀이

  1. triangle 높이를 n으로 저장
  2. 높이 n-2 부터 시작하여 0까지 역순으로 반복 (n-1은 바닥이므로 시작점)
  3. 각 레벨의 모든 요소에 대해, 그 아래 레벨의 바로 아래와 오른쪽 요소 중 큰 값을 현재 요소에 더함
  4. 모든 레벨의 계산이 끝나면, triangle[0][0] (최대 경로의 합) 반환

 

[Python]

def solution(triangle):
    n = len(triangle)
    
    for i in range(n-2, -1, -1):
        for j in range(len(triangle[i])):
            triangle[i][j] += max(triangle[i+1][j], triangle[i+1][j+1])
    return triangle[0][0]

 

    7
   3 8
  8 1 0
 2 7 4 4
4 5 2 6 5

예시를 들어 설명하면, 처음 'n-2'층의 각 숫자는 아래 층의 인접한 두 숫자 중 큰 숫자와 합쳐져서 업데이트가 된다.

  • 첫 번째 요소 2는 아래층의 첫 번째 4와 두 번째 5 중에서 큰 값인 5와 합쳐져 7이 된다.
  • 두 번째 요소 7은 아래층의 두 번째 5와 세 번째 2 중에서 큰 값인 5와 합쳐져 12가 된다.
  • 세 번째 요소 4는 아래층의 세 번째 2와 네 번째 6 중에서 큰 값인 6과 합쳐져 10이 된다.
  • 네 번째 요소 4는 아래층의 네 번째 6과 다섯 번째 5 중에서 큰 값인 6과 합쳐져 10이 된다.
    7
   3 8
  8 1 0
 7 12 10 10
4 5 2 6 5

이런 식으로 계속 위로 올라가며 업데이트하면, 최종적으로 삼각형의 꼭대기의 값이 최대 경로의 합이 된다. 

 

[Java]

class Solution {
    public int solution(int[][] triangle) {
        int n = triangle.length;

        for (int i = n - 2; i > -1; i--) {
            for (int j = 0; j < triangle[i].length; j++) {
                triangle[i][j] += Math.max(triangle[i+1][j], triangle[i+1][j+1]);
            }
        }
      return triangle[0][0];  
    }
}
728x90
반응형