๊ธฐ๋ก๋ฐฉ

BOJ_1937 : ์š•์‹ฌ์Ÿ์ด ํŒ๋‹ค ๋ณธ๋ฌธ

CodingTest/Java

BOJ_1937 : ์š•์‹ฌ์Ÿ์ด ํŒ๋‹ค

Soom_1n 2024. 6. 10. 22:09

๐Ÿ‘‰ ๋ฌธ์ œ๋งํฌ



๐Ÿ”ธ ๋ฌธ์ œ ๋ถ„์„ ๐Ÿ”ธ

  • n x n ๊ฒฉ์žํŒ์—์„œ ์ƒํ•˜์ขŒ์šฐ๋กœ ์›€์ง์˜€์„ ๋•Œ ๊ฐ€์žฅ ๊ธด ์ด๋™๊ฑฐ๋ฆฌ๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.
  • ์ด๋™ ์‹œ ํ˜„์žฌ ์œ„์น˜ ๋ณด๋‹ค ํฐ ์ชฝ์œผ๋กœ๋งŒ ์ด๋™ํ•  ์ˆ˜ ์žˆ๋‹ค.

๐Ÿ”ธ ๋ฌธ์ œ ํ’€์ด ๐Ÿ”ธ

  • ์ตœ์žฅ ์ด๋™ ๊ฑฐ๋ฆฌ๋ฅผ ์ฐพ๋Š” ๊ทธ๋ž˜ํ”„ ํƒ์ƒ‰ ๋ฌธ์ œ์ด๊ณ , 4๋ฐฉํ–ฅ ์ด๋™์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ๋”ฐ๋กœ ์ €์žฅํ•  ํ•„์š” ์—†๊ฒŒ ํ•  ์ˆ˜ ์žˆ๋„๋ก ๊นŠ์ด ์šฐ์„  ํƒ์ƒ‰(DFS)๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.
  • ์ด๋™์€ ํ•ญ์ƒ ๊ฒฉ์žํŒ์˜ ์ˆซ์ž๊ฐ€ ํฐ ์ชฝ์œผ๋กœ ์ด๋™ํ•˜๋ฏ€๋กœ, ํŠน์ • ์นธ์œผ๋กœ ์ง„์ž…ํ•˜๋Š” ๋ฐฉํ–ฅ์ด ๋‹ฌ๋ผ๋„ ๋‚˜๊ฐ€๋Š” ์ตœ์ ์˜ ๋ฐฉ๋ฒ•์€ ํ•ญ์ƒ ๊ฐ™๋‹ค. DP๋ฅผ ์ด์šฉํ•œ๋‹ค.
    • ์ด ์›๋ฆฌ๋ฅผ ์ด์šฉํ•ด์„œ ํ•œ ๊ฒฉ์ž ์นธ์—์„œ ์‹œ์ž‘ํ•ด์„œ ์ตœ์žฅ ๋ช‡ ๊ธธ์ด๊นŒ์ง€ ์ด๋™ํ•  ์ˆ˜ ์žˆ๋Š”์ง€ dp ๋ฐฐ์—ด์— ์ €์žฅํ•ด๊ฐ„๋‹ค.
    • ์ด๋ฏธ ํƒ์ƒ‰ํ–ˆ๋˜ ์นธ์ด๋ผ๋ฉด, ์žฌํƒ์ƒ‰ ํ•  ํ•„์š” ์—†์ด ๊ธฐ์กด ์ตœ์žฅ๊ฐ’์„ ์ด์šฉํ•˜๋ฉด ๋œ๋‹ค.
  • ๋ชจ๋“  ์นธ์—์„œ ์‹œ์ž‘ํ•ด๋ณด๊ณ  ์ตœ๋Œ€๊ฐ’์„ ๊ตฌํ•ด ์ถœ๋ ฅํ•œ๋‹ค.

๐Ÿ”ธ ์ฝ”๋“œ ๐Ÿ”ธ

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

public class Main {
    private static int N, max;
    private static int[][] map, dp;
    private static int[] dx = {-1, 0, 1, 0};
    private static int[] dy = {0, 1, 0, -1};

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

        N = Integer.parseInt(br.readLine());
        map = new int[N][N];
        dp = new int[N][N];

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

        // DFS
        for (int i = 0; i < N; i++) {
            for (int j = 0; j < N; j++) {
                max = Math.max(max, dfs(i, j));
            }
        }

        // Output
        bw.write(Integer.toString(max));
        bw.flush();
    }

    private static int dfs(int row, int col) {
        if (dp[row][col] != 0) {
            return dp[row][col];
        }
        dp[row][col] = 1;

        for (int k = 0; k < 4; k++) {
            int r = row + dx[k];
            int c = col + dy[k];
            if (0 <= r && r < N && 0 <= c && c < N && map[row][col] < map[r][c]) {
                dp[row][col] = Math.max(dp[row][col], dfs(r, c) + 1);
            }
        }

        return dp[row][col];
    }
}

๐Ÿ”ธ ์ฝ”๋“œ ํ•ด์„ ๐Ÿ”ธ

  • ์žฌ๊ท€ ๋ฉ”์„œ๋“œ dfs()์—์„œ ํ˜„์žฌ ๊นŠ์ด๋ฅผ ๋„˜๊ฒจ์ค„ ํ•„์š” ์—†์ด, ๋‹ค์Œ ์นธ์˜ ์ขŒํ‘œ๋งŒ ์žˆ์œผ๋ฉด ๋œ๋‹ค.
    • ์ด๋ฏธ ํƒ์ƒ‰ํ–ˆ๋˜ ์นธ์ด๋ผ๋ฉด ๊ทธ dp๋ฐฐ์—ด์˜ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
    • ํƒ์ƒ‰ํ•˜์ง€ ์•Š์•˜๋‹ค๋ฉด, 4๋ฐฉ ํƒ์ƒ‰์œผ๋กœ ๋ฐ ์žฌ๊ท€ ํ˜ธ์ถœ๋กœ ์ตœ์žฅ๊ฐ’์„ ๊ตฌํ•œ๋‹ค.
    • ์—ฌ๊ธฐ์„œ ํ•ญ์ƒ ํฐ ๊ฐ’ ๋ฐฉํ–ฅ์œผ๋กœ ์ด๋™ํ•˜๋ฏ€๋กœ, ๊ธฐ์กด ๊ฒฝ๋กœ์™€ ๊ฒน์น  ์ผ์ด ์—†๋‹ค.
  • ๋ชจ๋“  ์นธ์—์„œ ์‹œ์ž‘ํ•ด๋ณด๊ณ , ์ตœ๋Œ€๊ฐ’์„ ์ถœ๋ ฅํ•œ๋‹ค.

๐Ÿ”ธ end ๐Ÿ”ธ

  • ์ฒ˜์Œ ํ’€์ด๋Š” ๋‹จ์ˆœ DFS๋งŒ ์ ์šฉํ•ด์„œ ์‹œ๊ฐ„์ดˆ๊ณผ๊ฐ€ ๋‚ฌ๋‹ค. 5~6 % ๊นŒ์ง€๋Š” ๋งž์•˜๋Š”๋ฐ ๋„ˆ๋ฌด ๋Š๋ ธ์—ˆ๋‹ค.
  • ๋‘๋ฒˆ์งธ ํ’€์ด๋Š” DP๋ฅผ ์ ์šฉํ•˜๊ธด ํ–ˆ๋Š”๋ฐ, ๋ฐฉ๋ฌธ์ฒดํฌ๋ฅผ ํ•˜๊ฑฐ๋‚˜ dp๋ฐฐ์—ด์„ ์—ญ๋ฐฉํ–ฅ์œผ๋กœ ์ €์žฅํ–ˆ๋‹ค.
    • dp๋ฐฐ์—ด์— ํ˜„์žฌ ์œ„์น˜๊นŒ์ง€ ์˜ค๋Š”๋ฐ ์ตœ์žฅ์œผ๋กœ ๊ฑธ๋ฆฐ ๊ธธ์ด๋ฅผ ์ €์žฅํ–ˆ๋‹ค. 
  • ๋งˆ์ง€๋ง‰ ํ’€์ด๋Š” dp๋ฐฐ์—ด์— ํ˜„์žฌ ์œ„์น˜์—์„œ ๋ช‡ ๊นŠ์ด๊นŒ์ง€ ๋“ค์–ด๊ฐˆ ์ˆ˜ ์žˆ๋Š”์ง€๋ฅผ ์ €์žฅํ–ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ทธ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ–ˆ๋‹ค.
    • ๊ธฐ์กด ์ฝ”๋“œ๋“ค ๋ณด๋‹ค ์••๋„์ ์œผ๋กœ ๋นจ๋ž๋Š”๋ฐ, ํ•ญ์ƒ ํฐ ๋ฐฉํ–ฅ์œผ๋กœ ์ด๋™ํ•ด์„œ ๊ฒฝ๋กœ๊ฐ€ ๊ฒน์น˜์ง€ ์•Š๋Š”๋‹ค๋Š” ์ ๋„ ํฌํ•จ์‹œ์ผฐ๊ณ ,
      ์ด๋ฏธ ํƒ์ƒ‰ํ•œ ๊ณณ์˜ dp๊ฐ’์„ ์ž˜ ํ™œ์šฉํ•ด์„œ ๊ทธ๋Ÿฐ ๊ฒƒ ๊ฐ™๋‹ค.
    • dp๋ฐฐ์—ด์˜ ์ €์žฅ ๊ฐ’์„ ์–ด๋–ป๊ฒŒ ์„ค์ •ํ•˜๋Š”์ง€์— ๋”ฐ๋ผ์„œ ์ด๋ ‡๊ฒŒ ํšจ์œจ์ด ๋‹ฌ๋ผ์ง€๋Š”๊ตฌ๋‚˜ ๋ฐฐ์šธ ์ˆ˜ ์žˆ์—ˆ๋‹ค.
728x90