웅쓰뚱쓰
웅쓰의 IT
웅쓰뚱쓰
  • 분류 전체보기 (127)
    • 프로그래밍 (31)
      • 자료구조&알고리즘 (12)
      • Django (1)
      • NAS (3)
      • python (1)
      • Java (2)
      • Kotlin (0)
      • 안드로이드 (0)
      • 백준 (6)
      • 프로그래머스 (1)
      • 블록체인 (4)
    • IT (57)
      • 스마트폰 (30)
      • 모바일 (3)
      • 기타제품 (9)
      • 기타기술 (10)
      • 소식 (5)
    • 꿀팁 (1)
      • 윈도우10 (1)
    • 리얼후기 (4)
      • 제품리뷰 (2)
      • 일상리뷰 (2)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • LG
  • 동적배열
  • 블록체인
  • vr
  • 앱 만들기
  • 안드로이드
  • 삼성
  • 폴더블폰
  • 패스트캠퍼스 #패캠챌린지 #직장인인강 #직장인자기계발 #패스트캠퍼스후기 #Android앱개발올인원패키지Online
  • 백준
  • 이더리움
  • 블랙프라이데이
  • 화웨이
  • 안드로이드 스튜디오
  • 아마존

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
웅쓰뚱쓰

웅쓰의 IT

백준 2096 내려가기 with 자바
프로그래밍/백준

백준 2096 내려가기 with 자바

2022. 10. 24. 12:00


https://www.acmicpc.net/problem/2096

풀이

윗 줄에서 부터 최대 / 최소값을 더해가면사 내려가면 된다

 

어떤 위치( [i][j] ) 에서의 최대값은

윗 줄( [i-1][j-1], [i-1][j], [i-1][j+1] ) 중에서 최대값인 녀석을

선택하여 해당 위치( [i][j] ) 에 더해주면 된다

 

예를 들어 배열이

1 2 3

4 5 6

4 9 0 인경우

 

2번째 줄 (4 5 6) 부터 시작하여

4는 윗줄 중에 가장 큰 2,

5는 3,

6은 3 과 더하면

 

6 8 9

4 9 0 이 된다

이제 그 다음 줄 (4 9 0)에서 계산을 하면

4는 윗줄 중에 가장 큰 8,

9는 9,

0은 9 와 더하면

 

결과는 12, 18 ,9 가 되며

최대값은 18이 된다

 

해당 로직을 구현한 코드이다

static int[] dj = {-1, 0, 1};

static boolean isIn(int j) {
    if (j >= 0 && j < 3) return true;
    return false;
}

static void solve(int i) {
    if (i == N - 1) return;

    for (int j = 0; j < 3; j++) {

        int max = 0;
        int min = Integer.MAX_VALUE;
        for (int dir = 0; dir < 3; dir++) {
            int newJ = j + dj[dir];

            if (isIn(newJ)) {
                max = Math.max(max, arrMax[i][newJ]);
                min = Math.min(min, arrMin[i][newJ]);
            }
        }

        arrMax[i + 1][j] += max;
        arrMin[i + 1][j] += min;
    }

    solve(i + 1);
}

i = 0번째 행에서 부터 시작하여

i+1번 행의 각각의 원소에

i번째 행의 최대 / 최소 값을 더해주었으며

재귀를 통해 N-1행 전까지 실행하였다

 

재귀가 끝난 후

마지막 행에서 최대 / 최소 값만 찾아주면 된다

int max = Math.max(Math.max(arrMax[N - 1][0], arrMax[N - 1][1]), arrMax[N - 1][2]);
int min = Math.min(Math.min(arrMin[N - 1][0], arrMin[N - 1][1]), arrMin[N - 1][2]);

 


 

전체 코드

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class Main {

    static int N;
    static int[][] arrMax;
    static int[][] arrMin;
    static int[] dj = {-1, 0, 1};

    static boolean isIn(int j) {
        if (j >= 0 && j < 3) return true;
        return false;
    }

    static void solve(int i) {
        if (i == N - 1) return;

        for (int j = 0; j < 3; j++) {

            int max = 0;
            int min = Integer.MAX_VALUE;
            for (int dir = 0; dir < 3; dir++) {
                int newJ = j + dj[dir];

                if (isIn(newJ)) {
                    max = Math.max(max, arrMax[i][newJ]);
                    min = Math.min(min, arrMin[i][newJ]);
                }
            }

            arrMax[i + 1][j] += max;
            arrMin[i + 1][j] += min;
        }

        solve(i + 1);
    }

    public static void main(String[] args) throws Exception {

        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        N = Integer.parseInt(br.readLine());
        arrMax = new int[N][3];
        arrMin = new int[N][3];

        for (int i = 0; i < N; i++) {
            StringTokenizer st = new StringTokenizer(br.readLine());
            for (int j = 0; j < 3; j++) {
                int n = Integer.parseInt(st.nextToken());
                arrMax[i][j] = n;
                arrMin[i][j] = n;
            }
        }

        solve(0);

        int max = Math.max(Math.max(arrMax[N - 1][0], arrMax[N - 1][1]), arrMax[N - 1][2]);
        int min = Math.min(Math.min(arrMin[N - 1][0], arrMin[N - 1][1]), arrMin[N - 1][2]);

        System.out.println(max + " " + min);
    }
}

'프로그래밍 > 백준' 카테고리의 다른 글

백준 1541 잃어버린 괄호 with 자바  (0) 2022.11.19
백준 1043 거짓말 with 자바  (1) 2022.10.30
백준 2636 치즈 with 자바  (0) 2022.10.28
백준 5430 AC with 자바  (0) 2022.10.25
백준 7662 이중 우선순위 큐 with 자바  (1) 2022.10.23
    '프로그래밍/백준' 카테고리의 다른 글
    • 백준 1043 거짓말 with 자바
    • 백준 2636 치즈 with 자바
    • 백준 5430 AC with 자바
    • 백준 7662 이중 우선순위 큐 with 자바
    웅쓰뚱쓰
    웅쓰뚱쓰

    티스토리툴바