삼각형 위의 최대 경로 개수 세기 (난이도: 중)

2022. 10. 4. 11:06·알고리즘 (with JAVA)/동적 계획법

( 여기서 먼저 이 알고리즘을 보기전에 아래의 사이트를 먼저 학습하고 보는 것을 추천합니다. )

삼각형 위의 최대 경로 (난이도: 하) (tistory.com)

 

삼각형 위의 최대 경로 (난이도: 하)

1. 문제 설명 (1) 아래의 그림과 같이 삼각형으로 배치된 자연수들이 있다고 가정한다. (2) 맨 위의 숫자에서 시작해서, 한 번에 한 칸씩 아래로 내려가 맨 아래 줄까지 닿는 경로를 만들려고 한다.

kind-coding.tistory.com

 

 

 

 

1. 문제 설명

(1) "삼각형 위의 최대 경로"에서는 최대 경로의 합을 구했지 경로 자체는 구하지 않았다.

 

(2) 예를 들어, 아래의 그림 삼각형에는 세 개의 최대 경로 {9, 7, 2, 6}, {9, 7, 3, 5}, {9, 7, 3, 5}가 존재하며

합은 모두 24가 됩니다.

 

(3) 만약 N이 커질 경우에 최대 경로의 수를 찾는 프로그램을 작성하시오.

 

 

 

 

2. 입출력 조건 및 예제

입력 조건

X

 

출력 조건

X

 

 

입력 예제

2

4

9 0 0 0
5 7 0 0
1 3 2 0
3 5 5 6

5

6 0 0 0 0
1 2 0 0 0
3 7 4 0 0
9 4 1 7 0
2 7 5 9 4

 

출력 예제

3

1

 

 

 

 

3. 제약 조건

X

 

 

 

 

4. 가정법

X

 

 

 

 

5. 기저 사례

(1) y가 N-1의 위치가 도달했을 경우

 

 

 

 

6. 코드

public class TRIPATHCNT {
    private static BufferedReader sc = new BufferedReader(new InputStreamReader(System.in));
    private static StringBuilder sb = new StringBuilder();

    private static int[][] A;
    private static int N;

    private static int[][] countCache;
    private static int[][] pathCache;

    public static void main(String[] args) throws IOException {
        StringTokenizer st;
        int C = Integer.parseInt(sc.readLine());

        for(int i=0; i<C; i++) {
            countCache = new int[101][101];
            pathCache = new int[101][101];

            N = Integer.parseInt(sc.readLine());
            A = new int[N][N];

            for(int y=0; y<N; y++) {
                st = new StringTokenizer(sc.readLine());
                for(int x=0; x<N; x++) {
                    A[y][x] = Integer.parseInt(st.nextToken());
                }
            }

            sb.append(solve(0, 0)+"\n");
        }
        System.out.println(sb);
    }

    private static int solve(int y, int x) {
        if(y==N-1) return 1;

        if(countCache[y][x] != 0) return countCache[y][x];

        // 만약 (y+1, x+1)이 더 크다면 아래 오른쪽에서 시작
        // 만약 (y+1, x)이 더 크다면 아래에서 시작
        // 단, 둘 다 최대 경로가 같다면 둘다 카운트 ++
        if(path(y+1, x+1) >= path(y+1,x)) countCache[y][x] += solve(y+1, x+1);
        if(path(y+1, x+1) <= path(y+1,x)) countCache[y][x] += solve(y+1, x);

        return countCache[y][x];
    }

    // 삼각형 위의 최대 경로 합 구하는 메서드
    private static int path(int y, int x) {
        if(y==N-1) return A[y][x];

        if(pathCache[y][x] != 0) return pathCache[y][x];

        return pathCache[y][x] = Math.max(path(y+1, x)+A[y][x], path(y+1, x+1)+A[y][x]);
    }
}

 

 

 

 

7. 점화식

 

저작자표시 (새창열림)

'알고리즘 (with JAVA) > 동적 계획법' 카테고리의 다른 글

장마가 찾아왔다 (난이도: 하)  (0) 2022.10.06
우물을 기어오르는 달팽이 (난이도: 하)  (2) 2022.10.04
타일링 방법의 수 세기 (난이도: 하)  (2) 2022.10.03
양자화 (난이도: 중)  (0) 2022.10.03
원주율 외우기 (난이도: 하)  (0) 2022.10.01
'알고리즘 (with JAVA)/동적 계획법' 카테고리의 다른 글
  • 장마가 찾아왔다 (난이도: 하)
  • 우물을 기어오르는 달팽이 (난이도: 하)
  • 타일링 방법의 수 세기 (난이도: 하)
  • 양자화 (난이도: 중)
백_곰
백_곰
  • 백_곰
    친절한 코딩
    백_곰
  • 전체
    오늘
    어제
    • 분류 전체보기
      • 알고리즘 (with JAVA)
        • 기본 알고리즘
        • 완전 탐색
        • 분할 정복 알고리즘
        • 동적 계획법
        • 탐욕법
        • 코딩 테스트 기출 문제
        • 코드트리 조별과제
      • 백준 (with JAVA)
        • 완전 탐색
        • 분할 정복
        • 그 외
      • 자바
        • 개발 환경 구축하기
        • 팁
        • 기본적인 개념
        • 컬렉션 프레임워크
        • 프로세스와 쓰레드
        • 지네릭스
        • 람다식
        • 스트림
        • 입출력 IO
        • 네트워킹
        • 열거형(enums)
        • java.lang 패키지
        • java.time 패키지
        • 유용한 클래스들
        • 형식화 클래스들
      • 안드로이드 with 자바
        • 응용 문제들
        • 자잘한 문제들
        • 오류 보고서
  • 블로그 메뉴

    • 링크

    • 공지사항

    • 인기 글

    • 태그

      제자리 정렬
      스트림
      java.time 패키지
      중간연산
      소켓 프로그래밍
      람다식
      serializable
      ServerSocket
      알고스팟
      다형성
      문자 기반 스트림
      불안정 정렬
      map()
      outputstream
      Collections Framework
      안드로이드 스튜디오
      코딩트리조별과제
      역직렬화
      java.lang패키지
      snail
      Arrays
      코딩테스트
      file
      유용한 클래스
      InputStream
      안정 정렬
      자바 개념
      코드트리
      선택 정렬
      TCP 소켓 프로그래밍
    • 최근 댓글

    • 최근 글

    • hELLO· Designed By정상우.v4.10.3
    백_곰
    삼각형 위의 최대 경로 개수 세기 (난이도: 중)
    상단으로

    티스토리툴바