BOJ_G5_14503
๐ [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์ผ๋ก ๊ณ์ ์ฒญ์ํ ๊ณณ์ ์ฒ๋ฆฌํด ์คฌ์ผ๋ฉด ์ํด์ค๋ ๋์์ ๊ฒ ๊ฐ๋ค.