[アルゴリズム]伯準1932(整数三角形)/Java

12171 ワード

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

class Solution {
	public static void main(String args[]) throws Exception {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st;
		int N = Integer.parseInt(br.readLine());
		int[][] t = new int[N][N];  // 값을 저장하는 배열
		int[][] d = new int[N][N];  //최댓값을 저장하는 배열

		
		//값을 입력 받음
		for (int i = 0; i < N; i++) {
			st = new StringTokenizer(br.readLine());
			for (int j = 0; j <= i; j++) {
				t[i][j] = Integer.parseInt(st.nextToken());
			}
		}
		
		// 시작점의 값
		d[0][0] = t[0][0];
		
		//최댓값은 이전 행의 동일한 열(j)의 값과 이전 열(j-1)의 값의 최댓값에 현재 인덱스의 값을 더한 것
		for (int i = 1; i < N; i++) {
			for (int j = 0; j < N; j++) {
				if (j == 0) { // 맨 왼쪽은 이전 열(j-1)이 없으므로 따로 처리
					d[i][j] = d[i - 1][j] + t[i][j];
				} else {
					d[i][j] = Math.max(d[i - 1][j], d[i - 1][j - 1]) + t[i][j];
				}
			}
		}

		
		//마지막 행에서 최댓값을 찾음
		int max = 0;
		for (int i = 0; i < N; i++) {
			max = max > d[N - 1][i] ? max : d[N - 1][i];
		}
		
		System.out.print(max);
	}
}