꿈꾸는 개발자 박상호입니다.
Devhoyas
꿈꾸는 개발자 박상호입니다.
전체 방문자
오늘
어제
  • ALL (17)
    • Algorithm (7)
    • Java (2)
    • Go (2)
    • Spring (3)
    • Database (1)
      • MySQL (1)
      • ElasticSearch (0)
    • Http (1)
    • 일상 (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

인기 글

최근 글

티스토리

hELLO · Designed By 정상우.
꿈꾸는 개발자 박상호입니다.

Devhoyas

[백준 알고리즘] 1932번 정수 삼각형 (JAVA)
Algorithm

[백준 알고리즘] 1932번 정수 삼각형 (JAVA)

2022. 5. 16. 21:13


주의 사항

  • 첫번째와 마지막번째 그리고, 그 외의 순서에서의 점화식이 다르다. 
  • i = 첫번째, i = 마지막, i = 두번째 ~ 마지막 -1 까지의 점화식을 세워 풀자.
    • i = 첫번째 -> dp[i][j] = dp[i-1][j] + matrix[i][j]
    • i = 두번째 ~ 마지막 - 1 -> dp[i][j] = dp[i-1][j-1] + matrix[i][j]
    • i = 마지막 -> Math.max(dp[i-1][j-1], dp[i-1][j]) + matrix[i][j]
      • 왼쪽 대각 위, 오른쪽 대각 위 중 큰 값을 넣어줘야 한다.

 


코드 블럭

package boj401;

import java.util.Scanner;

public class boj_1932 {

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        int n = scanner.nextInt();

        scanner.nextLine();

        long[][] matrix = new long[n+1][n+1];

        for (int i = 1; i <= n; i++) {
            String[] s = scanner.nextLine().split(" ");

            for (int j = 1; j <= s.length; j++) {
                matrix[i][j] = Integer.valueOf(s[j - 1]);
            }

            for (int j = s.length + 1; j <= n; j++) {
                matrix[i][j] = 0;
            }
        }

        long[][] dp = new long[n + 1][n + 1];

        if (n == 1) {
            System.out.println(matrix[1][1]);
            return;
        } else if (n == 2) {
            System.out.println(Math.max(matrix[1][1] + matrix[2][1], matrix[1][1] + matrix[2][2]));
            return;
        }

        dp[1][1] = matrix[1][1];
        dp[2][1] = matrix[1][1] + matrix[2][1];
        dp[2][2] = matrix[1][1] + matrix[2][2];


        for (int i = 3; i <= n; i++) {
            for (int j = 1; j <= i; j++) {
                if (j == 1) {
                    dp[i][j] = dp[i - 1][j] + matrix[i][j];
                } else if (j == i) {
                    dp[i][j] = dp[i - 1][j - 1] + matrix[i][j];
                } else {
                    dp[i][j] = Math.max(dp[i - 1][j - 1], dp[i - 1][j]) + matrix[i][j];
                }
            }
        }

        long max = 0;
        for (int i = 1; i <= n; i++) {
            max = Math.max(max, dp[n][i]);
        }

        System.out.println(max);

    }

}
저작자표시 비영리 변경금지 (새창열림)

'Algorithm' 카테고리의 다른 글

[백준 알고리즘] 14889번 스타트와 링크 (JAVA)  (0) 2022.05.25
[백준 알고리즘] 2156번 포도주 시식 (JAVA)  (0) 2022.05.16
[백준 알고리즘] 9465번 스티커 (JAVA)  (0) 2022.05.16
[백준 알고리즘] 1874번 스택 수열 (JAVA)  (0) 2022.05.11
[백준 알고리즘] 9012번 괄호 (JAVA)  (0) 2022.05.11
    'Algorithm' 카테고리의 다른 글
    • [백준 알고리즘] 14889번 스타트와 링크 (JAVA)
    • [백준 알고리즘] 2156번 포도주 시식 (JAVA)
    • [백준 알고리즘] 9465번 스티커 (JAVA)
    • [백준 알고리즘] 1874번 스택 수열 (JAVA)
    꿈꾸는 개발자 박상호입니다.
    꿈꾸는 개발자 박상호입니다.
    취미를 특기로, 특기를 꿈으로, 꿈을 직업으로!

    티스토리툴바