본문 바로가기

CodingTEST

[백준 1932] 정수 삼각형(JAVA)

반응형

백준 1932번 문제 -  정수 삼각형

 

1932번: 정수 삼각형

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

www.acmicpc.net


문제 분석 

 

 

  • 삼각형을 이루게 숫자가 주어진다.
  • 아래층에 있는 수: 현재 층에서 선택된 수의 대각선 왼쪽, 대각선 오른쪽에 있는 것 중에서만 선택
  • 이때 첫번째 층 부터 마지막 층까지 거쳐간 수를 모두 더했을 때, 가장 큰 수를 출력해라.

 


해결 포인트

 

  • DP 이용
  • 각 층마다 숫자 등록
    • i층에 j번째 수(nums[i][j])의 왼쪽 대각선은 i+1층에 j번째 수(nums[i+1][j]),
      오른쪽 대각선은 i+1층에 j+1번째 수(nums[i+1][j+1])로 한다.
  • 1층인 하나의 수는 값 넣어놓기
  • 다음 층부터는 dp로 가장 큰 값 구하기
    • nums[i][j]가 갈 수 있는 다음 값 
      1. nums[i+1][j]
      2. nums[i+1][j+1]
    • 이 곳의 저장된 합과 현재 층에서 넘어갔을 때 합 중 큰 값을 저장

 


코드

 

import java.io.*;
import java.util.*;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

        int N = Integer.parseInt(br.readLine());

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

        int [][] sums = new int[N][N];
        sums[0][0] = nums[0][0];
        for (int i = 0; i < N-1; i++) {
            for (int j = 0; j < i+1; j++) {
                sums[i+1][j] = Math.max(sums[i][j] + nums[i+1][j], sums[i+1][j]);
                sums[i+1][j+1] = Math.max(sums[i][j] + nums[i+1][j+1], sums[i+1][j+1]);

            }
        }

        int result = 0;
        for (int i = 0; i < N; i++) {
            result = Math.max(result, sums[N-1][i]);
        }

        bw.write(result + "\n");
        bw.flush();
        bw.close();
    }

}
반응형

'CodingTEST' 카테고리의 다른 글

[프로그래머스] 의상 (JAVA)  (0) 2024.01.20
[백준 1991] 트리 순회(JAVA)  (0) 2024.01.16
[백준 1629] 곱셈 (JAVA)  (0) 2024.01.15
[백준 1149] RGB거리 (JAVA)  (0) 2024.01.14
[백준 16953] A → B (JAVA)  (0) 2024.01.14