본문 바로가기
알고리즘 문제 풀이

[프로그래머스] 정수 삼각형 - JAVA

by pinok1o 2021. 4. 3.

https://programmers.co.kr/learn/courses/30/lessons/43105?language=java#_=_

문제 해석

정수 삼각형 최상단에서
왼쪽 또는 오른쪽으로 내려가면서 값을 더해갈때
가장 최댓값은?

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

문제 풀이

모든 경우의 수를 해본다면? O(2^n)
내려가면서 왼쪽 또는 오른쪽 숫자를 사용했을때 최댓값만 남긴다 O(n^2)

최대값을 구할때 sorting을 사용해도 된다
Arrays.sort(arr);

//내림차순
Integer []arr = {1, 2, 0};
Arrays.sort(arr, Collections.reverseOrder());


class Solution {
    public int solution(int[][] triangle) {
        int answer = 0;
        int i, j, right, left;

        for(i = 1; i < triangle.length; i++){
            for(j = 0; j < triangle[i].length; j++){
                left = right = 0;

                if(j - 1 >= 0){
                    left = j - 1;
                    left = triangle[i][j] + triangle[i - 1][left];
                }

                if(j < triangle[i - 1].length){
                    right = j;
                    right = triangle[i][j] + triangle[i - 1][right];
                }

                triangle[i][j] = left > right ? left : right;
            }
        }

       for(int x: triangle[i - 1]){
           if(x > answer) answer = x;
       }

        return answer;
    }
}

'알고리즘 문제 풀이' 카테고리의 다른 글

[프로그래머스] 카펫  (0) 2021.04.11
[프로그래머스] 구명보트  (0) 2021.04.08
[백준]1로 만들기 - 복습  (0) 2021.03.31
[백준]그룹 단어 체커 - 백준  (0) 2021.03.31
[백준]DFS와 BFS - 복습  (0) 2021.03.31

댓글