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
62
63
64
65
66
67
68
| import java.io.*;
import java.util.*;
public class Main{
static int[][] arr;
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringBuilder sb = new StringBuilder();
int t = Integer.parseInt(br.readLine());
while(t-- > 0){
StringTokenizer st = new StringTokenizer(br.readLine());
int n = Integer.parseInt(st.nextToken()), m = Integer.parseInt(st.nextToken()), k = Integer.parseInt(st.nextToken());
arr = new int[n+2][m+2]; // 밭의 주변을 모두 0으로 감싸기 위해서
int cnt = 0;
for(int i = 0; i < k; i++){
st = new StringTokenizer(br.readLine());
int a = Integer.parseInt(st.nextToken()), b = Integer.parseInt(st.nextToken());
arr[a+1][b+1]++; // 밭의 주변을 0으로 감쌓기 때문에 인덱스가 증가하였으므로 입력값에 +1을 해준다
}
for(int i = 1; i <= n; i++){
for(int j = 1; j <= m; j++){
if(arr[i][j] == 1){
boolean res = change(arr, i, j);
if(res) cnt++;
}
}
}
sb.append(cnt).append("\n");
}
bw.write(sb.toString());
bw.flush();
bw.close();
br.close();
}
public static boolean change(int[][] arr, int i, int j){
boolean flag = false;
arr[i][j] = 2; // 체크된 배추의 값을 1에서 2로 바꿔준다.
if(arr[i][j-1] == 1) flag = change(arr, i, j-1); // 왼쪽에 체크가 안된 배추가 있으면 다시 함수 호출
else flag = true;
if(arr[i][j+1] == 1) flag = change(arr, i, j+1); // 우측
else flag = true;
if(arr[i-1][j] == 1) flag = change(arr, i-1, j); // 위
else flag = true;
if(arr[i+1][j] == 1) flag = change(arr, i+1, j); // 아래
else flag = true;
return flag; // 연결된 모든 배추들의 값이 1이 없으면 true 반환. 즉, 체크가 되서 2가 됬거나 아니면 공터이거나
}
}
|