๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

[์ธํ”„๋Ÿฐ/DFS/10.๋ฏธ๋กœํƒ์ƒ‰]

์‹œํ๋ฆฌํ‹ฐ์ง€ํ˜ธ 2024. 4. 1.

<<ํ’€์ด>>

 

์ด ๋ฌธ์ œ๋Š” ch์™€ DFS ๊ทธ๋ฆฌ๊ณ  dx, dy๋ฅผ ์ž˜ ์ ์šฉํ•˜๋ฉด ์‰ฝ๊ฒŒ ํ’€ ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ œ์ด๋‹ค. 

 

์šฐ์„ ์€ ์—ฌ๊ธฐ์„œ 1,1 ์ ์ด ์‹œ์ž‘์ด๋ผ๊ณ  ํ–ˆ์œผ๋‹ˆ๊น, ๋ฐฐ์—ด ํŠน์„ฑ์ƒ 0,0 ๋ถ€ํ„ฐ ์ƒ๊ธฐ๋Š” ๊ฒƒ์„ ๊ฐ์•ˆํ•ด์„œ ๊ฐ€๋…์„ฑ์„ ์œ„ํ•ด 8,8 ๋กœ ํฌ๊ธฐ๋ฅผ ๋งž์ถฐ์คฌ๋‹ค.

 

์ด๋ ‡๊ฒŒ ํ•˜๋ฉด 0ํ–‰ 0์—ด ์ „๋ถ€ ์ด์šฉ์€ ์•ˆํ•˜๊ณ  1,1๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜๊ฒŒ ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

๊ทธ๋Ÿฌ๊ณ  ๋‚œ ๋’ค์— ์ ์ ˆํ•˜๊ฒŒ DFS๋ฅผ ๋งŒ๋“ค์–ด์ฃผ๊ณ   7x7 ํ–‰๋ ฌ์—์„œ ๋ฒ—์–ด๋‚˜๋Š” ๊ฒฝ์šฐ๋Š” return ํ•˜๋„๋ก ํ–ˆ๋‹ค.

 

๋งˆ์ง€๋ง‰์œผ๋กœ ch๋ฅผ ๋‘ ์œผ๋กœ์จ ์ด๋ฏธ ์ง€๋‚˜๊ฐ„ ์ž๋ฆฌ๋Š” ๋‹ค์‹œ ํ•œ ๋ฒˆ ๋Œ์•„๊ฐ€์ง€ ๋ชปํ•˜๊ฒŒ ํ•˜๊ธฐ์œ„ํ•ด ch๋ฅผ ๋„์ž…ํ–ˆ๋‹ค. ๊ทธ ์ง€์ ์„ ์ง€๋‚  ๋•Œ ch = 1์„ ๋‘๊ณ  ์•ˆ ์ง€๋‚˜๊ฐ€๋ฉด ch = 0์œผ๋กœ ๋งŒ๋“ค์–ด์ฃผ์—ˆ๋‹ค.

 

๊ทธ ๊ฒฐ๊ณผ ์ด์ƒ์—†์ด ๋ฌธ์ œ๋ฅผ ํ’€ ์ˆ˜ ์žˆ์—ˆ๋‹ค !!

 

์ „ํ˜•์ ์ธ DFS ๋ฌธ์ œ๋กœ์„œ ์ด์ œ ์ด๋Ÿฐ ๋ฌธ์ œ๋Š” ์†์‰ฝ๊ฒŒ ํ’€ ์ˆ˜ ์žˆ๋‹ค ใ…Žใ…Ž 

import java.util.Scanner;

class Main {
    public static int[] dx = {0, 0, -1, 1};
    public static int[] dy = {-1, 1, 0, 0};
    public static int count = 0;
    public static int[][] ch = new int[8][8];

    private void DFS(int[][] arr, int row, int column) {
        if (row == 7 && column == 7) {
            count++;
            return;
        }

        if (row < 1 || row > 7 || column < 1 || column > 7) {
            return;
        } else if(ch[row][column] != 1 && arr[row][column] == 0){
            ch[row][column] = 1;
            DFS(arr, row + dx[0], column + dy[0]);
            DFS(arr, row + dx[1], column + dy[1]);
            DFS(arr, row + dx[2], column + dy[2]);
            DFS(arr, row + dx[3], column + dy[3]);
            ch[row][column] = 0;
        }
    }



    public static void main(String[] args) throws Exception{
        Main T = new Main();
        Scanner in = new Scanner(System.in);
        int[][] arr = new int[8][8];
        for (int i = 1; i <= 7; i++) {
            for (int j = 1; j <= 7; j++) {
                arr[i][j] = in.nextInt();
            }
        }

        T.DFS(arr, 1, 1);

        System.out.println(count);


    }
}

 

-๊ฐ•์‚ฌ๋‹˜ ํ’€์ด-

 

์ด๋ฒˆ์—๋Š” ๊ฐ•์‚ฌ๋‹˜๊ณผ ๋‚˜์˜ ํ’€์ด๊ฐ€ ํฌ๊ฒŒ ํ‹€๋ฆฌ์ง€ ์•Š๋‹ค. ๋‹ค๋งŒ, ๋ฐ˜๋ณต๋ฌธ์„ ํ™œ์šฉํ•ด์„œ ์กฐ๊ธˆ ๋” ์ฝ”๋“œ๋ฅผ ๊น”๋”ํ•˜๊ฒŒ ๋งŒ๋“ค์—ˆ๋‹ค๋Š” ์ ์ด๋‹ค.

for๋ฌธ์„ ํ†ตํ•ด DFS์˜ ์ˆ˜ ์ฐจ์ด๊ฐ€ ๋‚˜๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  board ์—ญ์‹œ static์œผ๋กœ ๋นผ์คฌ๋Š”๋ฐ ์ด๋ ‡๊ฒŒ๋„ ํ•  ์ˆ˜ ์žˆ์Œ์„ ํ•œ ๋ฒˆ ์ธ์ง€ํ•˜๊ณ  ๊ฐ„๋‹ค !!

 

์™ธ์—๋Š” ๋™์ผํ•˜๋‹ค ใ…Žใ…Ž

 

๊ฐ•์‚ฌ๋‹˜๊ป˜ ๋งŽ์ด ๋ฐฐ์›Œ์„œ ๊ทธ๋Ÿฐ์ง€ ํ’€์ด ๋งŽ์ด ๋‹ฎ์•„์žˆ๋‹ค !!

 

์˜ค๋Š˜๋„ ๋งŽ์ด ๋ฐฐ์›Œ๊ฐ„๋‹ต

import java.util.*;
class Main {
    static int[] dx={-1, 0, 1, 0};
    static int[] dy={0, 1, 0, -1};
    static int[][] board;
    static int answer=0;

    public void DFS(int x, int y){
        if(x==7 && y==7) answer++;
        else{
            for(int i=0; i<4; i++){
                int nx=x+dx[i];
                int ny=y+dy[i];
                if(nx>=1 && nx<=7 && ny>=1 && ny<=7 && board[nx][ny]==0){
                    board[nx][ny]=1;
                    DFS(nx, ny);
                    board[nx][ny]=0;
                }
            }
        }
    }

    public static void main(String[] args){
        Main T = new Main();
        Scanner kb = new Scanner(System.in);
        board=new int[8][8];
        for(int i=1; i<=7; i++){
            for(int j=1; j<=7; j++){
                board[i][j]=kb.nextInt();
            }
        }
        board[1][1]=1;
        T.DFS(1, 1);
        System.out.print(answer);
    }
}

๋Œ“๊ธ€