๋ฐฑ์ค€(boj)

[JAVA]1189 ์ปด๋ฐฑํ™ˆ, ์‹ค๋ฒ„1

cons-ps 2023. 6. 30. 02:56

 ๐Ÿ“š ๋ฌธ์ œ  

 

 

1189๋ฒˆ: ์ปด๋ฐฑํ™ˆ

์ฒซ ์ค„์— ์ •์ˆ˜ R(1 ≤ R ≤ 5), C(1 ≤ C ≤ 5), K(1 ≤ K ≤ R×C)๊ฐ€ ๊ณต๋ฐฑ์œผ๋กœ ๊ตฌ๋ถ„๋˜์–ด ์ฃผ์–ด์ง„๋‹ค. ๋‘ ๋ฒˆ์งธ๋ถ€ํ„ฐ R+1๋ฒˆ์งธ ์ค„๊นŒ์ง€๋Š” R×C ๋งต์˜ ์ •๋ณด๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” '.'๊ณผ 'T'๋กœ ๊ตฌ์„ฑ๋œ ๊ธธ์ด๊ฐ€ C์ธ ๋ฌธ์ž์—ด์ด ์ฃผ์–ด์ง„๋‹ค

www.acmicpc.net

๐Ÿ” ์•„์ด๋””์–ด  

ํ•ด๋‹น ๋ฌธ์ œ์—์„œ ํ™•์ธํ•  ์ ์€ ์™ผ์ชฝ ์•„๋ž˜์—์„œ ์˜ค๋ฅธ์ชฝ ์œ„๋กœ ํ–ฅํ•œ๋‹ค๋Š” ์ ์ž…๋‹ˆ๋‹ค. 

์ด ๋ถ€๋ถ„๋งŒ ์ฃผ์˜ํ•ด์„œ DFS ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ˆ˜ํ–‰ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

DFS์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์„ ํƒํ•œ ์ด์œ ๋Š” K๋ฒˆ์งธ ์‹œ๊ฐ„์— (0, c-1) ์ง€์ ์— ์˜ค๋Š” ๊ฒƒ์ด๋ฏ€๋กœ ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ์„ธ๊ธฐ ์ข‹์€ ๊นŠ์ด ์šฐ์„ ํƒ์ƒ‰์„ ์ด์šฉํ•˜์—ฌ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜์˜€์Šต๋‹ˆ๋‹ค. (BFS๋กœ ํ’€๋ฉด ์ตœ๋‹จ ๊ฑฐ๋ฆฌ๋ฅผ ๊ตฌํ•˜๊ธฐ๋Š” ์šฉ์ดํ•˜์ง€๋งŒ ๊ฐ ๊ฒฝ๋กœ์— ๋Œ€ํ•ด์„œ ํ•ด๋‹น ๊ฒฝ๋กœ์— ๋”ฐ๋ฅธ ๋ฐฉ๋ฌธํƒ์ƒ‰์„ ๋น„๊ตํ•˜๊ณ  k๋ฒˆ์งธ ์ธ ๊ฒƒ์„ ํ™•์ธํ•˜๊ณ  ์–ด๋ ต๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค)

 

๐Ÿ“ ํ’€์ด 

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

public class Boj_1189_์ปด๋ฐฑํ™ˆ {
    private static final int[] dirX = {0, 0, -1, 1};
    private static final int[] dirY = {-1, 1, 0, 0};

    private static char[][] map;
    private static boolean[][] visited;
    private static int r, c, k;
    private static int cnt = 0;

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st;
        st = new StringTokenizer(br.readLine());
        r = Integer.parseInt(st.nextToken());
        c = Integer.parseInt(st.nextToken());
        k = Integer.parseInt(st.nextToken());
        map = new char[r][c];
        visited = new boolean[r][c];

        for (int i = 0; i < r; i++) {
            map[i] = br.readLine().toCharArray();
        }

        visited[r - 1][0] = true;
        dfs(r - 1, 0, 1);
        System.out.println(cnt);
    }

    private static void dfs(int x, int y, int depth) {
        if (x == 0 && y == c - 1 && depth == k) {
            cnt++;
        }

        if (k <= depth) return; //๋” ์ด์ƒ ํƒ์ƒ‰ํ•˜๋Š”๊ฒƒ์ด ์˜๋ฏธ๊ฐ€ ์—†์Œ

        for (int i = 0; i < 4; i++) {
            int mvx = x + dirX[i];
            int mvy = y + dirY[i];

            if (mvx < 0 || mvy < 0 || r <= mvx || c <= mvy || visited[mvx][mvy]) continue;//๋ฒ”์œ„๋ฅผ ๋„˜์–ด๊ฐ€๊ฑฐ๋‚˜, ์ด๋ฏธ ๋ฐฉ๋ฌธํ•จ
            if (map[mvx][mvy] == 'T') continue;

            visited[mvx][mvy] = true;
            dfs(mvx, mvy, depth + 1);
            visited[mvx][mvy] = false;
        }
    }
}