2 ๋ถ„ ์†Œ์š”

๐Ÿ“ [G5_14503] ๋กœ๋ด‡ ์ฒญ์†Œ๊ธฐ

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

public class Main{

    static int N, M;
    static int[][] map;
    // ๋ถ, ๋™, ๋‚จ, ์„œ
    static int[] dx = {0, 1, 0, -1};
    static int[] dy = {-1, 0, 1, 0};
    static int res = 1;

    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());
        M = Integer.parseInt(st.nextToken());

        // ์ดˆ๊ธฐ๊ฐ’ ์ž…๋ ฅ
        st = new StringTokenizer(br.readLine(), " ");
        int r = Integer.parseInt(st.nextToken());
        int c = Integer.parseInt(st.nextToken());
        int d = Integer.parseInt(st.nextToken());

        map = new int[N][M];

        // ์ž…๋ ฅ
        for (int i = 0; i < N; i++) {
            st = new StringTokenizer(br.readLine(), " ");
            for (int j = 0; j < M; j++) {
                map[i][j] = Integer.parseInt(st.nextToken());
            }
        }

        dfs(r, c, d);
        System.out.println(res);
    }

    public static void dfs(int y, int x, int d) {
        // ํ˜„์žฌ ์œ„์น˜ ์ฒญ์†Œ
        map[y][x] = -1;

        // ์™ผ์ชฝ๋ฐฉํ–ฅ๋ถ€ํ„ฐ ํƒ์ƒ‰
        for (int i = 0; i < 4; i++) {
            // ํ˜„์žฌ ๋ฐฉํ–ฅ์—์„œ ์™ผ์ชฝ์œผ๋กœ
            d = (d + 3) % 4;
            // ๋ถ, ์„œ, ๋‚จ, ๋™ ํƒ์ƒ‰
            int nx = x + dx[d];
            int ny = y + dy[d];

            // ์ฒญ์†Œ๊ฐ€ ์•ˆ๋œ ๊ณณ์ด ์žˆ์œผ๋ฉด
            if (nx >= 0 && ny >= 0 && nx < M && ny < N && map[ny][nx] == 0) {
                // ์นด์šดํŒ…
                res++;
                dfs(ny, nx, d);

                // ๋ฆฌํ„ด ์•ˆํ•˜๋ฉด ๋’ค๋กœ ๊ฐ€์„œ ๋‹ค๋ฅธ ๊ณณ์„ ์ฒญ์†Œํ•  ์ˆ˜ ์žˆ์Œ
                return;
            }
        }

            // ๋„ค ๋ฐฉํ–ฅ ๋ชจ๋‘ ์ฒญ์†Œ๊ฐ€ ๋˜์–ด์žˆ๊ฑฐ๋‚˜ ๋ฒฝ์ธ ๊ฒฝ์šฐ
            // ๋’ค๋Œ๊ธฐ
            int back = (d + 2) % 4;
            int bx = x + dx[back];
            int by = y + dy[back];

            if (bx >= 0 && by >= 0 && bx < M && by < N && map[by][bx] != 1) {
                dfs(by, bx, d);
            }
        }
    }

๐Ÿค” ๋‚˜์˜ ์ƒ๊ฐ

์‚ผ์„ฑ ์ฝ”ํ…Œ ๋Œ€๋น„ ๋ฌธ์ œ๋ฅผ ํ’€์—ˆ๋‹คโ€ฆ
๊ตฌํ˜„, ์‹œ๋ฎฌ๋ ˆ์ด์…˜ ๋ฌธ์ œ์ด๋ฉฐ dfs๋ฅผ ์ด์šฉํ•ด์„œ ๋ฌธ์ œ๋ฅผ ํ’€ ์ˆ˜ ์žˆ์—ˆ๋‹ค.
์ด ๋ฌธ์ œ์˜ ์ฐจ๋ณ„์ ์€ ๋„ค ๋ฐฉํ–ฅ์ด ๋ชจ๋‘ ์ฒญ์†Œ๊ฐ€ ๋˜์–ด์žˆ๊ฑฐ๋‚˜ ๋ฒฝ์ธ ๊ฒฝ์šฐ ๋ฐฉํ–ฅ์„ ๋ฐ”๊ฟ”์„œ ์›€์ง์ด๋Š” ๊ฒƒ๊ณผ ์™ผ์ชฝ ์šฐ์„ ์œผ๋กœ ๋Œ๋ฉด์„œ ๋‹ค ์ฒดํฌํ•˜๋Š” ๊ฒƒ์ด๋‹ค.
๊ทธ๋ž˜์„œ ๋ถ, ๋™, ๋‚จ, ์„œ ๋ฐฉํ–ฅ์„ ์ด์šฉํ•ด ์™ผ์ชฝ์œผ๋กœ ๋Œ๋ฉด์„œ ์ฒดํฌํ•ด์ฃผ๊ณ  ๋งŒ์•ฝ ์ฒญ์†Œ๊ฐ€ ์•ˆ๋˜์–ด ์žˆ์œผ๋ฉด ์ขŒํ‘œ๋ฅผ ์˜ฎ๊ธฐ๊ณ  ์นด์šดํŒ…์„ ํ•ด์ฃผ๊ณ  ๋งŒ์•ฝ ๋ชจ๋“  ๋ฐฉํ–ฅ ์ฒญ์†Œ๊ฐ€ ๋˜์–ด์žˆ๊ฑฐ๋‚˜ ๋ฒฝ์ด๋ผ์„œ ๋” ์ด์ƒ ๋ชป๊ฐ€๋Š” ๊ฒฝ์šฐ ๋ฐฉํ–ฅ์„ ๋ฐ˜๋Œ€๋กœ ๋Œ๋ ค์„œ ๋Œ์•„๊ฐ„๋‹ค.
๊ทธ๋ฆฌ๊ณ  ์ขŒํ‘œ๋ฅผ ์˜ฎ๊ธธ ๋•Œ return์„ ๊ผญ ํ•ด์ค˜์•ผ ํ•œ๋‹ค. ์•ˆํ•ด ์ฃผ๋ฉด ๊ณ„์† ๋’ค๋กœ ๊ฐ€์„œ ์ฒญ์†Œ ํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ฒ˜๋ฆฌํ•ด์ฃผ์—ˆ๋‹ค. ๋งŒ์•ฝ boolean์œผ๋กœ ๊ณ„์† ์ฒญ์†Œํ•œ ๊ณณ์„ ์ฒ˜๋ฆฌํ•ด ์คฌ์œผ๋ฉด ์•ˆํ•ด์ค˜๋„ ๋˜์—ˆ์„ ๊ฒƒ ๊ฐ™๋‹ค.

ํƒœ๊ทธ: , , ,

์นดํ…Œ๊ณ ๋ฆฌ:

์—…๋ฐ์ดํŠธ: