티스토리 뷰

https://www.acmicpc.net/problem/1932

 

1932번: 정수 삼각형

첫째 줄에 삼각형의 크기 n(1 ≤ n ≤ 500)이 주어지고, 둘째 줄부터 n+1번째 줄까지 정수 삼각형이 주어진다.

www.acmicpc.net

 

그동안 제일 취약했던 DP문제들을 풀어볼 생각이다..

 

이 문제에서는

맨 위층부터 시작해서 아래에 있는 수 중 하나를 택하며 아래층으로 내려올 때

1) 현재 수의 바로 밑에 있는 수 2) 대각선 오른쪽 아래에 있는 수 들 중에서만 택할 수 있다.

 

즉, arr[i][j]를 택할 수 있는 위치는

1) 바로 위의 수 2) 대각선 왼쪽 위에 있는 수들이다.
1), 2) 의 위치에서 더 큰 합을 가지는 경우를 택하여 arr[i][j]의 수를 더해주면 (i, j)번째의 최적의 합이 된다.

다만

  1. j=0인 경우 대각선 왼쪽 위에 수가 없으므로 0으로 계산한다.
  2. i=j인 경우 바로 위에 숫자가 없으므로 0으로 계산한다.

 

import java.io.*;
import java.util.*;
// 210606

public class Main_BJ_1932_정수삼각형 {
    static int N;
    static int[][] dp;
    public static void main(String[] args) throws Exception {
        //System.setIn(new FileInputStream("src/res/input.txt"));
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st;

        N = stoi(br.readLine());

        dp = new int[N][N];
        for(int i=0; i<N; i++) {
            st = new StringTokenizer(br.readLine(), " ");
            for(int j=0; j<i+1; j++) {
                dp[i][j] = stoi(st.nextToken());
            }
        }
        
        // 다이나믹 프로그래밍으로 2번째 줄 부터 내려가면서 확인
        for(int i=1; i<N; i++) {
            for(int j=0; j<i+1; j++) {
                int upLeft, up;
                // 왼쪽 위에서 내려오는 경우
                if(j==0) upLeft = 0;
                else upLeft = dp[i-1][j-1];
                // 바로 위에서 내려오는 경우
                if(j==i) up = 0; // 위에가 없음
                else up = dp[i-1][j];
                // 최대 합 저장
                dp[i][j] = dp[i][j] + Math.max(upLeft, up);
            }
        }

        int ans = 0;
        // 맨 마지막 줄의 값 중 최대값이 답
        for(int j=0; j<N; j++) {
            ans = Math.max(ans, dp[N-1][j]);
        }
        System.out.println(ans);
    }

    static int stoi(String str) {
        return Integer.parseInt(str);
    }
}

'코딩테스트 > 백준' 카테고리의 다른 글

[BJ] 2629. 양팔저울  (0) 2021.06.25
[BJ] 1238. 파티  (0) 2021.06.25
[BJ] 17472. 다리 만들기 2  (0) 2021.04.24
[BJ] 20057. 마법사 상어와 토네이도  (0) 2021.04.24
[BJ] 17142. 연구소 3  (0) 2021.04.23
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
글 보관함