문제 출처
https://www.acmicpc.net/problem/1987
접근 방식 및 풀이
- BFS, DFS 모두 사용가능하지만, BFS는 알파벳의 방문여부를 체크하기 까다롭다. 이부분에서 해매다가 결국 DFS 알고리즘을 적용하여 해결하였다.
소스 코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
|
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Deque;
import java.util.LinkedList;
import java.util.StringTokenizer;
public class Main {
static char[][] map;
static boolean[] visitcheckdfs;
static int[] dx = {0,1,0,-1};
static int[] dy = {1,0,-1,0};
static int R, C;
static int ans =1;
static int cnt =1;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
C = Integer.parseInt(st.nextToken());
R = Integer.parseInt(st.nextToken());
map =new char[C][R];
dist =new int[C][R];
visited = new boolean[C][R];
visitcheckdfs = new boolean[26];
for (int i = 0; i < C; i++) {
String input = br.readLine();
for (int j = 0; j < R; j++) {
map[i][j] = (char) (input.charAt(j) - 'A');
}
}
dfs(map, visitcheckdfs, 0,0);
System.out.println(ans);
}
private static void dfs(char[][] map, boolean[] visited , int x, int y){
int idx = map[x][y];
visited[idx] = true;
for (int i = 0; i <4 ; i++) {
int next_x = x + dx[i];
int next_y = y + dy[i];
if(next_x>=0 && next_y>=0 && next_x < C&& next_y < R ){
int tmpnextxy = map[next_x][next_y];
if(!visitcheckdfs[tmpnextxy]){
dfs(map, visitcheckdfs, next_x, next_y);
}
}
}
--cnt;
visitcheckdfs[idx] = false;
}
}
|
결과
'Competition > Baekjoon' 카테고리의 다른 글
[백준] 1451번 자바 직사각형으로 나누기 (6) | 2020.05.05 |
---|---|
[백준] 1261번 자바 알고스팟 (0) | 2020.05.02 |
[백준] 10971번 자바 외판원 순회 2 (0) | 2020.05.01 |