728x90
반응형
https://www.acmicpc.net/problem/1932
1932번: 정수 삼각형
첫째 줄에 삼각형의 크기 n(1 ≤ n ≤ 500)이 주어지고, 둘째 줄부터 n+1번째 줄까지 정수 삼각형이 주어진다.
www.acmicpc.net
728x90
※ 문제 풀이 도출 과정
위에서부터 내려오면서 셀에 있는 값을
이전 행의 값을 더한다. 이전행의 값을 더할 때 방향은 ↓↘.
근데 그 중에 더 큰값을 선택해야 한다.
반응형
제일 첫번째 열은 그냥 수직으로 누적 합을 구해주면 된다.
두번째 열부터 현재 행이 i번째 행, 현재 열이 j번째 열이라고 한다면,
i-1행의 j-1과 i-1행의 j번째의 값과 비교하여 더 큰 수를 누적하여 더해주면 된다.
여기서 중요한 것은
삼각형의 크기가 1부터 500까지이기 때문에
n= 1 일때에도 값이 제대로 나올 수 있도록 처리해줘야 한다.
예를 들어,
1
1
을 입력하면 1이 나와야 한다.
위의 경우를 고려하지 않아서 생각보다 많이 틀린 문제이다.
package dp;
import java.util.Scanner;
public class IntTriangle {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
long[][] arr = new long[n][n];
for (int i = 0; i < n; i++) {
for (int j = 0; j <= i; j++) {
arr[i][j] = sc.nextInt();
}
}
long max = 0;
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j <= i; j++) {
long temp = 0;
if(i > 0) temp = j == 0 ? arr[i-1][j] : Math.max(arr[i-1][j-1], arr[i-1][j]);
arr[i][j] = temp + arr[i][j];
if(i == arr.length-1) max = Math.max(max, arr[i][j]);
}
}
// for (int i = 0; i < arr.length; i++) {
// for (int j = 0; j <= i; j++) {
// System.out.print(arr[i][j] + " ");
// }
// System.out.println();
// }
System.out.println(max);
}
}
728x90
반응형
'코딩테스트 > 백준' 카테고리의 다른 글
[백준/java] 4963번 : 섬의 개수 - BFS (0) | 2021.08.13 |
---|---|
[백준/java] 14891번: 톱니바퀴 - 삼성 코딩테스트 기출문제 (0) | 2021.08.13 |
[백준/java] 21922번: 학부 연구생 민상 - BFS (0) | 2021.08.10 |
[백준/java] 1926번: 그림 - BFS(Breath-First-Search) (0) | 2021.08.07 |
[백준/java] 20055번: 컨베이어 벨트 위의 로봇 - 시뮬레이션(삼성 기출) (0) | 2021.08.05 |
댓글