베오
DCode
베오
전체 방문자
오늘
어제
  • 분류 전체보기 (218)
    • 공지사항 (1)
    • 잡설 (1)
    • Programming (33)
      • [C] (1)
      • [Java] (4)
      • [Python] (2)
      • [Android] (2)
      • [Network] (0)
      • [Operation System] (2)
      • [Spring Boot] (22)
      • [Docker] (0)
    • Algorithm (31)
      • 자료구조 (2)
      • 알고리즘 (Java) (14)
      • 알고리즘 (기초) (15)
    • Coding Test (131)
      • BOJ (131)
      • Algospat (0)
    • 이론적인거 (14)
      • 보안 (5)
      • 오류 해결 (2)
      • 디자인 패턴 (5)
      • 네트워크 (1)
      • 기타 (1)
    • 최신기술 (4)
      • 블록체인 (1)
    • [Project] (1)

블로그 메뉴

  • 🐈‍⬛ GitHub
  • 📫 방명록
  • 🔖 태그

공지사항

인기 글

티스토리

hELLO · Designed By 정상우.
베오

DCode

Coding Test/BOJ

[BOJ/JAVA] 1937번: 욕심쟁이 판다

2022. 8. 21. 10:31

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

 

1937번: 욕심쟁이 판다

n × n의 크기의 대나무 숲이 있다. 욕심쟁이 판다는 어떤 지역에서 대나무를 먹기 시작한다. 그리고 그 곳의 대나무를 다 먹어 치우면 상, 하, 좌, 우 중 한 곳으로 이동을 한다. 그리고 또 그곳에

www.acmicpc.net

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.Arrays;
import java.util.StringTokenizer;

public class java_1937 {
    final static int dydx[][] = { { -1, 0 }, { 1, 0 }, { 0, -1 }, { 0, 1 } };
    final static int INF = Integer.MIN_VALUE;
    static int board[][];

    // [i][j] 위치에서 이동할 수 있는 최대 칸
    static int cache[][];

    static int dp(int y, int x) {
        if (cache[y][x] != -1) {
            return cache[y][x];
        }

        cache[y][x] = INF;

        int toY = -1;
        int toX = -1;
        for (int i = 0; i < dydx.length; i++) {
            int tmpY = y + dydx[i][0];
            int tmpX = x + dydx[i][1];
            try {
                if (board[tmpY][tmpX] > board[y][x]) {
                    toY = tmpY;
                    toX = tmpX;
                    cache[y][x] = Math.max(cache[y][x], 1 + dp(toY, toX));
                }
            } catch (ArrayIndexOutOfBoundsException e) {
                continue;
            }
        }

        // 최댓값을 찾지 못했다면... 현재 칸만 + 1
        if (toY == -1 && toX == -1) {
            cache[y][x] = 1;
        }
        return cache[y][x];
    }

    static int solve(int N) {
        cache = new int[N][N];
        for (int i = 0; i < N; i++) {
            Arrays.fill(cache[i], -1);
        }

        for (int i = 0; i < N; i++) {
            for (int j = 0; j < N; j++) {
                dp(i, j);
            }
        }

        int result = 0;
        for (int row[] : cache) {
            for (int item : row) {
                if (result < item) {
                    result = item;
                }
            }
        }

        return result;
    }

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

        int N = Integer.parseInt(br.readLine());

        board = new int[N][N];

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

        bw.write(solve(N) + "\n");

        br.close();
        bw.close();
    }
}
저작자표시 (새창열림)

'Coding Test > BOJ' 카테고리의 다른 글

[BOJ/JAVA] 16918번: 봄버맨  (0) 2022.08.21
[BOJ/JAVA] 9205번: 맥주 마시면서 걸어가기  (0) 2022.08.21
[BOJ/JAVA] 1107번: 리모컨  (0) 2022.08.21
[BOJ/JAVA] 4920 테트리스 게임  (0) 2022.08.21
[BOJ/JAVA] 3085번: 사탕 게임  (0) 2022.08.21
    'Coding Test/BOJ' 카테고리의 다른 글
    • [BOJ/JAVA] 16918번: 봄버맨
    • [BOJ/JAVA] 9205번: 맥주 마시면서 걸어가기
    • [BOJ/JAVA] 1107번: 리모컨
    • [BOJ/JAVA] 4920 테트리스 게임
    베오
    베오

    티스토리툴바