백준(Java)/23년 5월

[Java] 백준 - 1932번: 정수 삼각형

C0MPAS 2023. 5. 17. 13:03

5월 17일(수) - 동적 계획법 1 (1932번)

 

1932번: 정수 삼각형

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

www.acmicpc.net

ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ

 

문제점

ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ

 

풀이

(C언어 풀이 활용)

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

import java.util.StringTokenizer;

public class Main {
    static int[][] triangle;
    static int[][] dp;
    public static void main(String[] args) throws IOException{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st;

        int N = Integer.parseInt(br.readLine());
        triangle = new int[N+1][N+1];
        dp = new int[N+1][N+1];

        for(int i=1; i<N+1; i++)
        {
            st = new StringTokenizer(br.readLine(), " ");
            for(int j=1; j<i+1; j++)
            {
                triangle[i][j] = Integer.parseInt(st.nextToken());
            }
        }

        dp[1][1] = triangle[1][1];
        for(int i=2; i<N+1; i++)
        {
            for(int j=1; j<i+1; j++)
            {
                if(j==1)
                {
                    dp[i][j] = triangle[i][j] + dp[i-1][j];
                }
                else if(j==i)
                {
                    dp[i][j] = triangle[i][j] + dp[i-1][j-1];
                }
                else
                {
                    dp[i][j] = triangle[i][j] + Math.max(dp[i-1][j-1], dp[i-1][j]);
                }
            }
        }

        int max=0;
        for(int j=1; j<N+1; j++)
        {
            if(max < dp[N][j])
            {
                max = dp[N][j];
            }
        }

        System.out.println(max);
    }
}

ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ