[이코테][Java] 정수 삼각형

2025. 4. 12. 16:48·PS/이코테

문제 설명

맨 위층 7부터 시작해서 아래에 있는 수 중 하나를 선택하여 아래층으로 내려올 때, 이제까지 선택된 수의 합이 최대가 되는 경로를 구하는 프로그램을 작성하세요.

아래층에 있는 수는 현재 층에서 선택된 수의 대각선 왼쪽 or 대각선 오른쪽에 있는 것 중에서만 선택할 수 있습니다.

 

입력조건

  • 첫째 줄에 삼각형의 크기
  • 둘째 줄부터 n+1번째 줄까지 정수 삼각형

출력조건

  • 합이 최대가 되는 경로에 있는 수의 합

입출력 예시

입력예시 출력예시
5
7
3 8
8 1 0
2 7 4 4
4 5 2 6 5
4

 

 

 

 

문제 풀이

  • 다이나믹 프로그래밍으로 풀이
  • '금광' 문제와 비슷한 유형의 문제이다.
  • 정수삼각형의 수들을 배열에 저장하면, 윗층에서 현재 위치로 내려올 수 있는 경우는 2가지가 있다.(왼쪽 위 or 바로 위)
  • 이 두가지 경우 중에서 더 큰  값을 가지는 경우를 선택해서 현재 위치의 수와 합한다.
  • 점화식으로 나타내면 다음과 같다.
d[i][j] = d[i][j] + max(d[i-1][j-1], d[i-1][j])

 

import java.io.*;
import java.util.*;

public class Main {
    
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st;

        int n = Integer.parseInt(br.readLine());    //삼각형의 크기

        int[][] dp = new int[n + 1][n + 1];
        for (int i = 1; i <= n; i++) {
            st = new StringTokenizer(br.readLine());
            for (int j = 1; j <= i; j++) {
                dp[i][j] = Integer.parseInt(st.nextToken());
            }
        }

        for (int i = 2; i <= n; i++) {
            for (int j = 1; j <= i; j++) {
                int left, right;
                //왼쪽 위
                if (j == 1) {
                    left = 0;
                } else {
                    left = dp[i - 1][j - 1];
                }
                //바로 위
                if (j == i) {
                    right = 0;
                } else {
                    right = dp[i - 1][j];
                }
                dp[i][j] = dp[i][j] + Math.max(left, right);
            }
        }

        int result = 0;
        for (int i = 1; i <= n; i++) {
            result = Math.max(result, dp[n][i]);
        }

        System.out.println(result);
    }
}

 

[참고서적]

이것이 취업을 위한 코딩 테스트다 with 파이썬 by 나동빈

저작자표시 비영리 변경금지

'PS > 이코테' 카테고리의 다른 글

[이코테][Java] 못생긴 수  (0) 2025.04.13
[이코테] 다이나믹 프로그래밍(Dynamic Programming)  (0) 2025.04.12
[이코테][Java] 금광  (0) 2025.04.10
[이코테][Java] 경쟁적 전염  (0) 2025.02.14
[이코테][Java] 만들 수 없는 금액  (0) 2025.02.14
'PS/이코테' 카테고리의 다른 글
  • [이코테][Java] 못생긴 수
  • [이코테] 다이나믹 프로그래밍(Dynamic Programming)
  • [이코테][Java] 금광
  • [이코테][Java] 경쟁적 전염
nyrimmm
nyrimmm
  • nyrimmm
    개발기록
    nyrimmm
  • 전체
    오늘
    어제
  • 글쓰기 관리
    • 분류 전체보기 (66)
      • Java (6)
      • Spring & SpringBoot (3)
      • Network (1)
      • DataBase (0)
      • SQL (1)
      • IntelliJ (3)
      • Git (0)
      • 자료구조 & 알고리즘 (2)
      • 트러블 슈팅 (1)
        • Spring (1)
      • PS (48)
        • 백준 (10)
        • 프로그래머스 (0)
        • SQL (9)
        • 이코테 (29)
      • 후기 & 회고 (1)
  • 태그

  • 인기 글

  • 최근 글

  • 최근 댓글

  • hELLO· Designed By정상우.v4.10.3
nyrimmm
[이코테][Java] 정수 삼각형
상단으로

티스토리툴바