https://www.acmicpc.net/problem/16724
๋ฌธ์
- ์ฑ์ฐ๊ฐ ์ ํด๋์ ๋ฐฉํฅ๋๋ก ์์ง์ด๊ธฐ ์์ํ๋ค.
- ๋ฐฉํฅ์ ์ด 4๊ฐ์ง๋ก U, D, L, R์ด๊ณ ๊ฐ๊ฐ ์, ์๋, ์ผ์ชฝ, ์ค๋ฅธ์ชฝ์ผ๋ก ์ด๋
- ์ง๋ ์ด๋ ๊ตฌ์ญ์ ์๋๋ผ๋ ์ฑ์ฐ๊ฐ ํผ๋ฆฌ๋ฅผ ๋ถ ๋ ‘SAFE ZONE’์ ๋ค์ด๊ฐ ์ ์๊ฒ ํ๋ ‘SAFE ZONE’์ ์ต์ ๊ฐ์๋ฅผ ์ถ๋ ฅ
์ ํ์ฌํญ
- N(1 ≤ N ≤ 1,000), M(1 ≤ M ≤ 1,000)
- ์ง๋ ๋ฐ์ผ๋ก ๋๊ฐ๋ ๋ฐฉํฅ์ ์ ๋ ฅ์ ์ฃผ์ด์ง์ง ์๋๋ค.
์์ ์ ์ถ๋ ฅ
์ ๋ ฅ
3 4
DLLL
DRLU
RRRU
์ถ๋ ฅ : 2
ํ์ด
- DFS(๊น์ด ์ฐ์ ํ์)
์ค์ ํ ๋ฐฉํฅ์ ๋ฐ๋ผ ๊ณ์ ์ด๋ํ๋ฏ๋ก ๊ทธ๋ํ ํ์์ DFS๋ก ํ๋ค. ํ ์ ์ ๊ธฐ์ค์ผ๋ก DFS ํ์์ ํ์ฌ ํ ์ฌ์ดํด์ ๊ตฌํ๋ค.
- ์ฌ์ดํด ํ์ ํ๊ธฐ
SAFE ZONE์ ์ฌ์ดํด์ด ์์๋๋ ๋ฃจํธ ๋ ธํธ์ ์์ด์ผ ํ๋ค. ๊ทธ๋์ ๋ฐฉ๋ฌธํ์ง ์์ ์ง์ ์ ๋ํด ๊ณ์ ๋ฐฉํฅ๋๋ก ํ์์ ํ์ฌ ํ์์ด ๋๋๋ฉด SAFE ZONE์ ์ค์นํ๋๋ก ํ๋ค.
ํ์ง๋ง ์๋ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ด ๋ค๋ฅธ ์ง์ ์์ DFS ํ์์ ํ์ ๋, ๊ฐ์ ์ฌ์ดํด์ธ ์ง์ ์์ ํ์์ ๋๋ด๋ ๊ฒฝ์ฐ๋ ์๋ค. ๊ฐ์ ์ฌ์ดํด์ด๋ฏ๋ก SAFE ZONE์ ์ค์นํ๋ฉด ์๋๋ค. ์ฌ์ดํด์ ์๋ก ๋ง๋๋ ๊ฑด์ง ์๋์ง ๊ตฌ๋ถํด์ค ํ์๊ฐ ์๋ค.
- ๊ทธ๋ํ ๋ฐฉ๋ฌธ ์ฒดํฌ : int 2์ฐจ์ ๋ฐฐ์ด
์ฌ์ดํด์ ์๋ก ๋ง๋๋ ๊ฑด์ง ์๋์ง ๊ตฌ๋ถํ๊ธฐ ์ํด DFS ์์ํ ๋๋ง๋ค ์ ๋ฒํธ๋ฅผ ๋ถ์ฌ ๋ฐฉ๋ฌธ ์ฒดํฌ๋ฅผ ํด์ค๋ค. DFS๊ฐ ์ข ๋ฃ๋ ์ง์ ์ ๋ฒํธ๊ฐ ์์ํ ๋์ ๋ฒํธ์ ๊ฐ๋ค๋ฉด ์๋ก ์ฌ์ดํด์ ์์ฑํ๊ฒ ๋๋ ๊ฒ์ด๊ณ , ํ์ฌ์ ๋ฒํธ์ ๋ค๋ฅด๋ค๋ฉด ์ด์ ์ ์ด๋ฏธ ๋ง๋ ์ฌ์ดํด์ธ ๊ฒ์ด๋ค.
์ฝ๋
import java.util.*;
import java.io.*;
public class BOJ_ํผ๋ฆฌ๋ถ๋์ฌ๋์ด {
static int N, M;
static char[][] graph;
static int[][] visited;
static int[] dx = {-1, 1, 0, 0}; //U, D, L, R
static int[] dy = {0, 0, -1, 1};
static int count;
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()); //์ด์ ์
graph = new char[N][M];
for(int i = 0; i < N; i++) {
char[] chArr = br.readLine().toCharArray();
for(int j = 0; j < M; j++) {
graph[i][j] = chArr[j];
}
}
//ํ์
visited = new int[N][M]; //๋ฐฉ๋ฌธ ํ์ : 0(๋ฐฉ๋ฌธX), 1์ด์(๋ฐฉ๋ฌธO)
count = 0; //์ ๋ต : SAFE ZONE์ ์ต์ ๊ฐ์
int idx = 0; //ํ์ ์ธ๋ฑ์ค
for(int i = 0; i < N; i++) {
for(int j = 0; j < M; j++) {
if(visited[i][j] == 0) { //๋ฐฉ๋ฌธํ ์ ์์ผ๋ฉด
dfs(i, j, ++idx); //ํ์
}
}
}
//์ถ๋ ฅ
System.out.println(count);
}
public static void dfs(int x, int y, int idx) {
visited[x][y] = idx;
int nx = x; //๋ค์ ์ด๋ ํ
int ny = y; //๋ค์ ์ด๋ ์ด
switch(graph[x][y]) {
case 'U' :
nx += dx[0];
ny += dy[0];
break;
case 'D' :
nx += dx[1];
ny += dy[1];
break;
case 'L' :
nx += dx[2];
ny += dy[2];
break;
case 'R' :
nx += dx[3];
ny += dy[3];
break;
}
if(0 <= nx && nx < N && 0 <= ny && ny < M) {
if(visited[nx][ny] == 0) { //๋ฐฉ๋ฌธํ ์ ์์
dfs(nx, ny, idx);
} else { //๋ฐฉ๋ฌธํ ์ ์์
if(visited[nx][ny] == idx) { //์ฌ์ดํด ์๋ก ์์ฑ
count++;
return;
}
//ํ์ฌ์ ์ธ๋ฑ์ค์ ๋ค๋ฆ(=์ด์ ์ ๋ง๋ ์ฌ์ดํด)
}
}
}
}
๊ฒฐ๊ณผ
๋ฐฐ์ด์
- visited ๋ฐฐ์ด์ intํ์ผ๋ก ํด์ ๊ตฌ์ญ(์ฌ์ดํด)์ ๊ตฌ๋ณํ๊ธฐ
'Algorithm > ๋ฐฑ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋ฐฑ์ค 14442๋ฒ : ๋ฒฝ ๋ถ์๊ณ ์ด๋ํ๊ธฐ2 (0) | 2023.08.30 |
---|---|
๋ฐฑ์ค 2206๋ฒ : ๋ฒฝ๋ถ์๊ณ ์ด๋ํ๊ธฐ (0) | 2023.08.30 |
๋ฐฑ์ค 13460๋ฒ : ๊ตฌ์ฌ ํ์ถ2 (0) | 2023.08.02 |
๋ฐฑ์ค 13459๋ฒ : ๊ตฌ์ฌ ํ์ถ (0) | 2023.08.02 |
๋ฐฑ์ค 1863๋ฒ : ์ค์นด์ด๋ผ์ธ ์ฌ์ด๊ฑฐ (0) | 2023.07.26 |