반응형

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

 

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.StringTokenizer;

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[][] triangle = new int[n][0];
		int[][] solutionDp = new int[n][0];
		int maxNum = 0;

		// 초기 정수 삼각형
		for (int i = 0; i < triangle.length; i++) {
			triangle[i] = new int[i + 1];
			solutionDp[i] = new int[i + 1];
		}

		// 정수 삼각형 내부의 값을 채움
		for (int i = 0; i < triangle.length; i++) {
			StringTokenizer inputSt = new StringTokenizer(br.readLine()); // 삼각형 한줄의 값

			for (int j = 0; j < triangle[i].length; j++) {
				triangle[i][j] = Integer.parseInt(inputSt.nextToken());
			}
		}

		solutionDp[0][0] = triangle[0][0];

		// 정수 삼각형 내부 값 탐색 -> 마지막 줄 이전까지만 실행함
		for (int i = 0; i < triangle.length - 1; i++) {
			for (int j = 0; j < triangle[i].length; j++) {
				solutionDp[i + 1][j] = Math.max(solutionDp[i + 1][j], solutionDp[i][j] + triangle[i + 1][j]);
				solutionDp[i + 1][j + 1] = Math.max(solutionDp[i + 1][j + 1],
						solutionDp[i][j] + triangle[i + 1][j + 1]);
			}
		}

		for (int num : solutionDp[n - 1]) { // 마지막 줄 최대 경로값 탐색
			maxNum = Math.max(maxNum, num);
		}

		bw.write(String.valueOf(maxNum));
		bw.flush();
		bw.close();
	}

}

 

처음 문제에 접근한 방식

1. 초기 입력받은 삼각형과 동일한 구조의 배열을 선언함

2. 삼각형의 맨 위 -> 아래로 내려오면서 각 위치의 왼쪽아래 오른쪽아래를 탐색하고 최소값을 비교함 

3. solutionDP[] 배열을 clone() 메서드를 통해 복사해서 결과값 출력하니 오답 발생.

4. clone()메서드의 경우 이차원 배열, 객체를 복사하는경우 깊은복사가 아닌 얕은 복사가 이루어짐

 

정답을 맞춘 풀이방법

1. solutionDP[] 배열을 초기 입력받을 배열과 동일한 방식으로 선언한 뒤 문제 해결함

반응형

'알고리즘 > 백준 문제[추후 옮길예정]' 카테고리의 다른 글

[JAVA] 백준 15649번  (0) 2021.07.23
[JAVA] 백준 10844번  (0) 2021.07.23
[JAVA] 백준 9461번  (0) 2021.06.18
[JAVA] 백준 1904번  (0) 2021.06.17
[JAVA] 백준 9184번  (0) 2021.06.10

+ Recent posts