[백준] PS/Java

[백준 1937] 욕심쟁이 판다 - JAVA

SH3542 2025. 2. 25. 20:48

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

 

 

이전 문제랑 거의 똑같다.

https://sh3542.tistory.com/251

 

[백준 1520] 내리막 길 - JAVA

https://www.acmicpc.net/problem/1520 두 코드를 비교했을 때,재귀적으로 경로를 찾아가는 것은 동일하다.다만, 방문처리 (코드에선 -1 or 0)을 하지 않으면 불필요한 재귀가 반복되어 시간초과였다. ACimpor

sh3542.tistory.com

 

dp[r][c] = 1은

 

지역을 방문했다는 것은 그 지역의  대나무를 먹었다는 뜻이기에 +1 하는 의미도 있고,

방문하지 않았음 (dr[r][c] = 0)일 때 와 구분하는 역할도 한다. 처음부터 배열을 1로 채우면 불필요한 탐색이 추가되므로 시간초과를 받는다.

 

특이한 점은,

m[tr][tc] < m[r][c]

 

조건의 부등호를 >로 바꿔도 ac다.

 

어차피 배열의 모든 부분을 탐색하며,

 

1. (i,j)를 시작점으로 한다 -> 더 큰 대나무가 있으면 이동하며 임의의 도착 지점을 찾는다.

2. (i,j)를 도착점으로 한다 -> 임의의 도착 지점에서 더 작은 대나무가 있으면 이동하며 (i,j)를 찾는다.

 

둘 다 말이 되기 때문이다.

 

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

class Main {

  static int solve(int r, int c) {

    if (dp[r][c] != 0) {
      return dp[r][c];
    }

    dp[r][c] = 1;

    for (int i = 0; i < 4; i++) {
      int tr = r + dr[i];
      int tc = c + dc[i];

      if (tr >= 0 && tr < N && tc >= 0 && tc < N && m[tr][tc] < m[r][c]) {
        dp[r][c] = Math.max(solve(tr, tc) + 1, dp[r][c]);
      }
    }

    return dp[r][c];
  }

  static int N, dp[][], m[][], dr[] = {0, 0, -1, 1}, dc[] = {-1, 1, 0, 0};

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

    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    StringTokenizer st = new StringTokenizer(br.readLine());
    N = Integer.parseInt(st.nextToken());

    dp = new int[N][N];
    m = new int[N][N];

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

    int ans = 0;
    for (int i = 0; i < N; i++) {
      for (int j = 0; j < N; j++) {
        ans = Math.max(solve(i, j), ans);
      }
    }
    System.out.println(ans);
  }
}

'[백준] PS > Java' 카테고리의 다른 글

[백준 1988] 낮잠 시간 - JAVA  (0) 2025.02.27
[백준 1584] 게임 - JAVA  (0) 2025.02.27
[백준 1520] 내리막 길 - JAVA  (0) 2025.02.25
[백준 1743] 음식물 피하기 - JAVA  (1) 2025.02.20
[백준 1460] 진욱이의 농장 - JAVA  (0) 2025.02.17