유블로그

[프로그래머스] 정수 삼각형 본문

알고리즘

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

yujeong kang 2021. 1. 6. 21:48

프로그래머스 level3 정수 삼각형

 

소요시간 : 53분

 

dp 항상 어려워했었고 푸는데 엄청 오래걸렸다 ㅋㅋㅋㅋㅋㅋ

그냥 dfs로 하니 시간초과나서 한참 고민했다

 

최댓값을 찾으려면 결국 밑에 있는 값이 중요하니 세로(i)를 N-1부터 시작해서 1까지,

가로(j)를 0~길이-1까지 양쪽 대각선 위로 다 더해보고 최댓값을 갱신했다.

결국 아래에서 꼭대기까지 최대합이 triangle[0][0] 에 저장되게 된다.

 

class Solution {
  int MAX = 0;
  int N;
  public int solution(int[][] triangle) {
    N = triangle.length;
    if(N == 1) return triangle[0][0];

    int[] arr;
    for (int i = N-1; i >= 1; i--) {
      arr = new int[triangle[i-1].length];
      for (int j = 0; j < triangle[i].length; j++) {
        if(j-1 >= 0) {
			arr[j-1] = Math.max(arr[j-1], triangle[i][j] + triangle[i-1][j-1]);
        }
        if(j < triangle[i-1].length) {
			arr[j] = Math.max(arr[j], triangle[i][j] + triangle[i-1][j]);
        }
      }
      for (int j = 0; j < arr.length; j++) {
      	triangle[i-1][j] = arr[j];
      }
    }

    return triangle[0][0];
  }
}

'알고리즘' 카테고리의 다른 글

[프로그래머스] 입국심사  (0) 2021.01.09
[프로그래머스] 등굣길  (0) 2021.01.07
[프로그래머스] 단어변환  (1) 2021.01.06
[프로그래머스] 소수찾기  (0) 2021.01.04
[프로그래머스] 모의고사  (0) 2021.01.03