본문 바로가기

코딩 테스트/백준(java)

DP - 1932. 정수 삼각형

반응형

문제

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 {
	public static void main(String[] args) throws Exception {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st = new StringTokenizer(br.readLine());
		int size = Integer.parseInt(st.nextToken()); 
		
		int[][] values = new int[size][size];
		for (int y = 0; y < size; y++) {
			st = new StringTokenizer(br.readLine());
			for (int x = 0; x < y+1; x++) {
				values[y][x] = Integer.parseInt(st.nextToken());
			}	
		}
		
		for (int y = size-2; y >= 0; y--) {
			for (int x = 0; x <= y; x++) {
				values[y][x] = values[y][x] + Math.max(values[y+1][x], values[y+1][x+1]);
			}	
		}	
		
		System.out.print(values[0][0]);
	}
}

 

설명

위층에서 아래층으로 계산해 나갈수도 있지만, 범위 제한을 추가해야하기 때문에, 번거로울수 있다 생각합니다.

그래서, 아래층에서부터 올라가볼게요. 오히려 범위 제한이 없어, 코드 구할때도 편할거에요.

로직도 쉬워지는데, 아래층의 연속된 값의 max값을 구하고, 윗층으로 올려보내주면 됩니다.

 

회고

최대값 구하기에 대한 DP 문제에 자신감 좀 붙으셨나요?

반응형

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

DP - 2156. 포도주 시식  (0) 2021.03.29
DP - 10870. 피보나치 수 5  (0) 2021.03.28
DP - 2579. 계단 오르기  (0) 2021.03.27
DP - 1149. RGB거리  (0) 2021.03.27
DP - 11726. 2×n 타일링  (0) 2021.03.25