728x90

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

 

1932번: 정수 삼각형

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

www.acmicpc.net

 

 

 

풀이)

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class Main_BJ_1932_정수삼각형 {
    public static void main(String[] args) throws Exception{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int n = Integer.parseInt(br.readLine());
        int[][] tree = new int[n][n];
        int[][] dp = new int[n][n];
        for(int i=0; i<n; i++){
            StringTokenizer st = new StringTokenizer(br.readLine());
            for(int j=0; j<=i; j++){
                tree[i][j] = Integer.parseInt(st.nextToken());
                if(i==n-1){
                   dp[i][j] = tree[i][j];
                }
            }
        }//for

        for(int i=n-2; i>=0; i--){
            for(int j=0; j<=i; j++){
                dp[i][j] = Math.max(dp[i+1][j] + tree[i][j], dp[i+1][j+1]+tree[i][j]);
            }
        }
        System.out.println(dp[0][0]);
    }//main
}

이차원 배열인 tree라는 배열과 dp 배열을 선언한다.

 

밑에서부터 최대값을 선택하여 더해서 올라가는 방식을 사용했다!

이때, 맨 마지막 줄은 tree와 같은 값을 넣어두고, 더하면서 올라가면 된다.

 

처음에는 이진 트리처럼 구해서 사용하려 했는데, 아니라는걸 깨닫고 바로 바꿨다..

이후 dp배열의 맨 꼭대기를 출력하면 끝!!

 

30

23 21

20 13 10

7 12 10 10

4 5 2 6 5

=> 이런 식으로 dp배열이 나오게 된다

728x90

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

백준 15903 카드 합체 놀이(JAVA)  (0) 2023.04.03
백준 2217 로프(JAVA)  (0) 2023.04.02
백준 1966 프린터 큐(JAVA)  (0) 2023.03.28
백준 1152 단어의 개수(JAVA)  (0) 2023.03.23
백준 15663 N과 M(9) (JAVA)  (0) 2023.03.22

+ Recent posts