๊ธฐ๋ก๋ฐฉ

BOJ_17070 : ํŒŒ์ดํ”„ ์˜ฎ๊ธฐ๊ธฐ 1 ๋ณธ๋ฌธ

CodingTest/Java

BOJ_17070 : ํŒŒ์ดํ”„ ์˜ฎ๊ธฐ๊ธฐ 1

Soom_1n 2023. 4. 7. 16:37

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

 

17070๋ฒˆ: ํŒŒ์ดํ”„ ์˜ฎ๊ธฐ๊ธฐ 1

์œ ํ˜„์ด๊ฐ€ ์ƒˆ ์ง‘์œผ๋กœ ์ด์‚ฌํ–ˆ๋‹ค. ์ƒˆ ์ง‘์˜ ํฌ๊ธฐ๋Š” N×N์˜ ๊ฒฉ์žํŒ์œผ๋กœ ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ๊ณ , 1×1ํฌ๊ธฐ์˜ ์ •์‚ฌ๊ฐํ˜• ์นธ์œผ๋กœ ๋‚˜๋ˆ„์–ด์ ธ ์žˆ๋‹ค. ๊ฐ๊ฐ์˜ ์นธ์€ (r, c)๋กœ ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ๋‹ค. ์—ฌ๊ธฐ์„œ r์€ ํ–‰์˜ ๋ฒˆํ˜ธ, c๋Š” ์—ด์˜

www.acmicpc.net



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

  • N x N ๊ฒฉ์ž๊ณต๊ฐ„์—์„œ ์ขŒ์ƒ๋‹จ๋ถ€ํ„ฐ ์šฐ์ƒ๋‹จ์œผ๋กœ ํŒŒ์ดํ”„๋ฅผ ์ด๋™์‹œํ‚ฌ ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.
    • ํŒŒ์ดํ”„๋Š” ์˜ค๋ฅธ์ชฝ, ์šฐํ•˜๋‹จ ๋Œ€๊ฐ์„ , ์•„๋ž˜๋กœ ๋ฐ€ ์ˆ˜ ์žˆ๋‹ค.
    • ๊ฒฉ์ž๊ณต๊ฐ„์—๋Š” ๋Œ์ด ์žˆ๋‹ค.
    • ํŒŒ์ดํ”„๋ฅผ ๋Œ๋ฆด ๋•Œ ํ™•๋ณด๋˜์–ด์•ผ ํ•˜๋Š” ๊ณต๊ฐ„์— ๋Œ์ด ์žˆ๊ฑฐ๋‚˜ ๊ฒฉ์ž ๊ณต๊ฐ„์„ ๋ฒ—์–ด๋‚˜์„œ๋Š” ์•ˆ๋œ๋‹ค.
  • DFS๋กœ ๋๊นŒ์ง€ ๋„์ฐฉํ•˜๋Š” ๊ฒฝ์šฐ๋ฅผ ์นด์šดํŠธํ•œ๋‹ค.
    • ๊ธฐ์กด ๊ฐ€๋กœ ์ผ๋•Œ๋Š” ๊ฐ€๋กœ์™€ ๋Œ€๊ฐ์„ , ๊ธฐ์กด ์„ธ๋กœ ์ผ๋•Œ๋Š” ์„ธ๋กœ์™€ ๋Œ€๊ฐ์„ , ๊ธฐ์กด ๋Œ€๊ฐ์„  ์ผ๋•Œ๋Š” ์„ธ ๊ฐ€์ง€ ๋ชจ๋“  ๊ฒฝ์šฐ๋ฅผ ํ™•์ธํ•ด์•ผ ํ•œ๋‹ค.

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

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

public class Main {
    private static int N, map[][], ans;
    private static int[] dr = {0,1,1};
    private static int[] dc = {1,1,0};
    public static void main(String[] args) throws IOException {
        // Input
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        N = Integer.parseInt(br.readLine());
        map = 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
        ans = 0;
        dfs(0, 1, 0);

        // Output
        System.out.println(ans);
    }

    private static void dfs(int r, int c, int d) {
        if (r == N-1 && c == N-1) {
            ans++;
            return;
        }

        switch (d) {
            case 0: // ๊ธฐ์กด ๊ฐ€๋กœ
                // ๊ฐ€๋กœ
                if (check(r+dr[0],c+dc[0]))
                    dfs(r+dr[0], c+dc[0], 0);
                // ๋Œ€๊ฐ์„ 
                if (check(r+dr[0],c+dc[0])
                        &&check(r+dr[1],c+dc[1])
                        &&check(r+dr[2],c+dc[2]))
                    dfs(r+dr[1], c+dc[1], 1);
                break;
            case 1: // ๊ธฐ์กด ๋Œ€๊ฐ์„ 
                // ๋Œ€๊ฐ์„ 
                if (check(r+dr[0],c+dc[0])
                        &&check(r+dr[1],c+dc[1])
                        &&check(r+dr[2],c+dc[2]))
                    dfs(r+dr[1], c+dc[1], 1);
                // ๊ฐ€๋กœ
                if (check(r+dr[0],c+dc[0]))
                    dfs(r+dr[0], c+dc[0], 0);
                // ์„ธ๋กœ
                if (check(r+dr[2],c+dc[2]))
                    dfs(r+dr[2], c+dc[2], 2);
                break;
            case 2: // ๊ธฐ์กด ์„ธ๋กœ
                // ์„ธ๋กœ
                if (check(r+dr[2],c+dc[2]))
                    dfs(r+dr[2], c+dc[2], 2);
                // ๋Œ€๊ฐ์„ 
                if (check(r+dr[0],c+dc[0])
                        &&check(r+dr[1],c+dc[1])
                        &&check(r+dr[2],c+dc[2]))
                    dfs(r+dr[1], c+dc[1], 1);
                break;
        }
    }

    private static boolean check(int r, int c) {
        if (0 <= r && r < N && 0 <= c && c < N && map[r][c] == 0)
            return true;
        return false;
    }
}

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

  • ํŒŒ์ดํ”„์˜ ์•ž์ชฝ ์ž…๊ตฌ์˜ ์ขŒํ‘œ๋Š” 0, 1๋ถ€ํ„ฐ ์‹œ์ž‘ํ•œ๋‹ค.
  • ํŒŒ์ดํ”„ ์ขŒํ‘œ๋ฅผ r, c ๋กœ, ๋ฐฉํ–ฅ์„ d๋กœ ๋„˜๊ฒจ dfs ๋ฉ”์„œ๋“œ์—์„œ ์žฌ๊ท€๋ฅผ ์ˆ˜ํ–‰ํ•œ๋‹ค.
    • ๊ฐ ๋ฐฉํ–ฅ์— ๋”ฐ๋ฅธ ํ™•์ธํ•ด์•ผ ํ•  ๊ฒฝ์šฐ์˜ ์ˆ˜๋กœ ์žฌ๊ท€ ํ˜ธ์ถœ์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.
    • ๋นˆ๊ณต๊ฐ„ ํ™•์ธ์€ ๋”ฐ๋กœ check ๋ฉ”์„œ๋“œ๋ฅผ ๋นผ์„œ ํ™•์ธํ•œ๋‹ค.
    • ๋๊นŒ์ง€ ๋„์ฐฉํ•˜๋ฉด ans๋ฅผ +1 ํ•œ๋‹ค.
  • ans๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.

๐Ÿ”ธ end ๐Ÿ”ธ

  • dfs๋กœ ํ’€์ดํ–ˆ์ง€๋งŒ, DP๋กœ ๋” ํšจ์œจ์ ์ด๊ฒŒ ํ’€์ด๊ฐ€ ๊ฐ€๋Šฅํ•œ ๊ฒƒ ๊ฐ™๋‹ค.

728x90