문제
위 그림은 크기가 5인 정수 삼각형의 한 모습이다.
맨 위층 7부터 시작해서 아래에 있는 수 중 하나를 선택하여 아래층으로 내려올 때, 이제까지 선택된 수의 합이 최대가 되는 경로를 구하는 프로그램을 작성하라. 아래층에 있는 수는 현재 층에서 선택된 수의 대각선 왼쪽 또는 대각선 오른쪽에 있는 것 중에서만 선택할 수 있다.
삼각형의 크기는 1 이상 500 이하이다. 삼각형을 이루고 있는 각 수는 모두 정수이며, 범위는 0 이상 9999 이하이다.
입력
첫째 줄에 삼각형의 크기 n(1 ≤ n ≤ 500)이 주어지고, 둘째 줄부터 n+1번째 줄까지 정수 삼각형이 주어진다.
출력
첫째 줄에 합이 최대가 되는 경로에 있는 수의 합을 출력한다.
import java.util.ArrayList;
import java.util.Comparator;
import java.util.Scanner;
public class baekjoon1932_2 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
ArrayList<ArrayList<Integer>> info = new ArrayList<>();
info.add(new ArrayList<>());
info.get(0).add(sc.nextInt());
for (int i = 1; i < n; i++) {
info.add(new ArrayList<>());
for (int j = 0; j < i + 1; j++) {
info.get(i).add(sc.nextInt());
// 맨 왼쪽에 있는 case
if (j == 0) {
info.get(i).set(j, info.get(i - 1).get(j) + info.get(i).get(j));
continue;
}
// 맨 오른쪽에 있는 case
if (j == i) {
info.get(i).set(j, info.get(i - 1).get(j - 1) + info.get(i).get(j));
continue;
}
// 중간에 있는 case
info.get(i).set(j, Math.max(info.get(i - 1).get(j - 1), info.get(i - 1).get(j)) + info.get(i).get(j));
}
}
Integer a = info.get(n - 1).stream().max(Comparator.comparing(x -> x)).orElse(1);
System.out.println(a);
}
}
import java.util.Arrays;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int num = sc.nextInt();
int ary[][] = new int[num + 1][num + 1];
for (int i = 1; i < num + 1; i++) {
for (int j = 1; j < i + 1; j++) {
ary[i][j] = sc.nextInt();
}
}
int totAry[][] = new int[num + 1][num + 1];
totAry[1][1] = ary[1][1];
for (int i = 2; i < num + 1; i++) {
for (int j = 1; j < i + 1; j++) {
totAry[i][j] = Math.max(totAry[i - 1][j - 1], totAry[i - 1][j]) + ary[i][j];
}
}
int res = 0;
for (int i = 1; i < num + 1; i++) {
if (res < totAry[num][i]) {
res = totAry[num][i];
}
}
System.out.println(res);
}
}
'알고리즘 > 초급1' 카테고리의 다른 글
[JAVA] 백준 11054번: 가장 긴 바이토닉 부분 수열 ( 초급 1-31 ) (0) | 2021.09.16 |
---|---|
[JAVA] 백준 11722번: 가장 긴 감소하는 부분 수열 ( 초급 1 - 30 ) (0) | 2021.09.07 |
[JAVA] 백준 2156번: 포도주 시식 (초급 1-28) - 실패 (0) | 2021.09.03 |
[JAVA] 백준 9465번: 스티커 (초급 1-27) (0) | 2021.09.03 |
[JAVA] 백준 11057번: 오르막 수 ( 초급 1-26 ) (0) | 2021.08.26 |