[BOJ] 1987. ์•ŒํŒŒ๋ฒณ (๐Ÿฅ‡, ๋ฐฑํŠธ๋ž˜ํ‚น)

lemythe423ยท2024๋…„ 3์›” 14์ผ
0

BOJ ๋ฌธ์ œํ’€์ด

๋ชฉ๋ก ๋ณด๊ธฐ
127/133
post-thumbnail

๐Ÿ”—

ํ’€์ด

์ขŒ์ธก ์ƒ๋‹จ์ธ ์ขŒํ‘œ (0, 0)์—์„œ ์‹œ์ž‘ํ•˜์—ฌ ๋ชจ๋“  ๋ณด๋“œ๋ฅผ ํƒ์ƒ‰ํ•˜๋ฉฐ ์ตœ๋Œ€ ๋ช‡ ์นธ ์ง€๋‚  ์ˆ˜ ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๋Š” ๋ฌธ์ œ์ด๋‹ค. ์ „์ฒด ๋ณด๋“œ์˜ ํฌ๊ธฐ๊ฐ€ ์ตœ๋Œ€ 400์ด๊ธฐ ๋•Œ๋ฌธ์— ์™„์ „ ํƒ์ƒ‰์œผ๋กœ ์ง„ํ–‰ํ•˜์—ฌ๋„ ์‹œ๊ฐ„ ์ดˆ๊ณผ๋Š” ๋ฐœ์ƒํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ๋‹ค.

ํŠน์ • ์‹œ์ ์—์„œ ๊ฐ€๋Šฅํ•œ ๋ชจ๋“  ๋ฐฉํ–ฅ์— ๋Œ€ํ•ด ํ™•์ธํ•ด์•ผ ํ•œ๋‹ค. ์—ฌ๊ธฐ์„œ ๊ฐ€๋Šฅํ•œ ๊ฒฝ์šฐ๋Š” ํ˜„์žฌ๊นŒ์ง€ ์ง€๋‚˜์˜จ ๊ฒฝ๋กœ ์ค‘์— ์•ž์œผ๋กœ ๋ฐฉ๋ฌธํ•  ์•ŒํŒŒ๋ฒณ์ด ์—†๋Š” ๊ฒฝ์šฐ์ด๋‹ค. ์ฆ‰ ๊ฐ™์€ ์•ŒํŒŒ๋ฒณ์„ ๋‘ ๋ฒˆ ๋ฐฉ๋ฌธํ•˜๋Š” ๊ฒƒ์€ ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค. ์ด๋Ÿฐ ํƒ์ƒ‰์˜ ๊ฒฝ์šฐ๋Š” ํ•ญ์ƒ ๋ฐฉ๋ฌธ์ฒ˜๋ฆฌ๋ฅผ ํ†ตํ•ด์„œ ๊ณ„์† ๊ฐ™์€ ์ž๋ฆฌ๋ฅผ ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•œ๋ฐ ์ด ๋ฌธ์ œ์—์„œ๋Š” ์ด๋ฏธ ๊ฐ™์€ ์•ŒํŒŒ๋ฒณ์„ ๋‹ค์‹œ ๋ฐฉ๋ฌธํ•˜๋Š” ๊ฒƒ์€ ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค๋Š” ์กฐ๊ฑด์„ ๊ฑธ์–ด์„œ ๋ฐฉ๋ฌธ์ฒ˜๋ฆฌ๊นŒ์ง€ ํ•œ๊บผ๋ฒˆ์— ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋„๋ก ์ œ์‹œํ•ด์ฃผ๊ณ  ์žˆ๋‹ค.

๊ทธ๋ž˜์„œ ๊นŠ์ด ์šฐ์„  ํƒ์ƒ‰์„ ํ†ตํ•ด ๊ฐ€๋Šฅํ•œ ๋ชจ๋“  ๊ฒฝ๋กœ์— ๋Œ€ํ•ด ํƒ์ƒ‰ํ•˜๋ฉด์„œ ๋งค๋ฒˆ ํƒ์ƒ‰์˜ ์ตœ๋Œ€ ๊ธธ์ด๋ฅผ ์—…๋ฐ์ดํŠธํ•œ๋‹ค. ์ดํ›„ ํ˜„์žฌ ์œ„์น˜์—์„œ ๋ฐฉ๋ฌธ ๊ฐ€๋Šฅํ•œ ๋ชจ๋“  ์œ„์น˜์— ๋Œ€ํ•ด์„œ ํ˜„์žฌ๊นŒ์ง€ ๋ฐฉ๋ฌธํ•œ ์  ์—†๋Š” ์•ŒํŒŒ๋ฒณ์˜ ๊ฒฝ์šฐ์—๋งŒ ๋ฐฉ๋ฌธํ•˜๋Š” ๊ฒƒ์œผ๋กœ ํ•œ๋‹ค. ์ด๋ ‡๊ฒŒ ์ฒ˜๋ฆฌํ•˜๊ฒŒ ๋˜๋ฉด ์ด๋ฏธ ๋ฐฉ๋ฌธํ•œ ์œ„์น˜์— ๋Œ€ํ•ด ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ๊ณ , ๋ฌธ์ œ์˜ ์กฐ๊ฑด์—์„œ์ฒ˜๋Ÿผ ๊ฐ™์€ ์•ŒํŒŒ๋ฒณ์„ ๋‘ ๋ฒˆ ๋ฐฉ๋ฌธํ•˜๋Š” ์ผ๋„ ์—†์„ ์ˆ˜ ์žˆ๋‹ค.

import java.util.*;
import java.io.*;

public class Main {
    static char[][] board;
    static int answer = 0;
    static boolean[] alpha = new boolean[26];
    static int R;
    static int C;
    static final int GAP = 'A';
    static int[][] direction = new int[][] {{0, 1}, {1, 0}, {-1, 0}, {0, -1}};
    public static void main(String[] args) throws IOException {
        Scanner sc = new Scanner(System.in);
        R = sc.nextInt();
        C = sc.nextInt();
        
        board = new char[R][C];
        for (int i = 0; i < R; i++) {
            board[i] = sc.next().toCharArray();
        }
        
        alpha[board[0][0] - GAP] = true;
        
        dfs(0, 0, 1);
        System.out.println(answer);
    }

    private static void dfs(int x, int y, int count) {
        answer = Math.max(answer, count);

        int nx; 
        int ny;
        char a;
        for (int i = 0; i < 4; i++) {
            nx = x + direction[i][0];
            ny = y + direction[i][1];
            
            if (nx < 0 || ny < 0 || nx >= R || ny >= C || alpha[board[nx][ny] - GAP]) continue;
            a = board[nx][ny];
            alpha[a - GAP] = true;
            dfs(nx, ny, count+1);
            alpha[a - GAP] = false;
        }
    }
}
profile
์•„๋ฌด๋ง์ด๋‚˜ํ•˜๊ธฐ

0๊ฐœ์˜ ๋Œ“๊ธ€