풀이
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
static int maxX = 0;
static int maxY = 0;
static int[][] field; // 농장 배열
public static void main(String[] args) throws IOException {
String str = "";
String[] arr;
int count = 0; // 배추 개수
int earthwormCount = 0;
int[] answer;
BufferedReader br = new BufferedReader ( new InputStreamReader (System.in));
int num = Integer.parseInt(br.readLine());
answer = new int[num];
for(int i=0; i<num; i++) {
earthwormCount = 0;
str = br.readLine();
arr = str.split(" ");
maxX = Integer.parseInt(arr[0]);
maxY = Integer.parseInt(arr[1]);
field = new int[maxX][maxY];
count = Integer.parseInt(arr[2]);
// 배추 위치 할당
for(int j=0; j<count; j++) {
str = br.readLine();
arr = str.split(" ");
field[Integer.parseInt(arr[0])][Integer.parseInt(arr[1])] = 1;
}
// 지렁이 개수 찾기
for(int j=0; j<maxX; j++) {
for(int k=0; k<maxY; k++) {
if(field[j][k] == 1) {
Find(j, k); // 재귀 실행
earthwormCount++;
}
}
}
answer[i] = earthwormCount;
}
for(int i=0; i<answer.length; i++) {
System.out.println(answer[i]);
}
}
private static void Find(int stateX, int stateY) {
field[stateX][stateY] = 2;
if(stateX == 0) {
if(field[stateX+1][stateY] == 1) {
Find(stateX+1, stateY);
}
}else if(stateX == maxX-1){
if(field[stateX-1][stateY] == 1) {
Find(stateX-1, stateY);
}
}else {
if(field[stateX+1][stateY] == 1) {
Find(stateX+1, stateY);
}
if(field[stateX-1][stateY] == 1) {
Find(stateX-1, stateY);
}
}
if(stateY == 0) {
if(field[stateX][stateY+1] == 1) {
Find(stateX, stateY+1);
}
}else if(stateY == maxY-1) {
if(field[stateX][stateY-1] == 1) {
Find(stateX, stateY-1);
}
}else {
if(field[stateX][stateY+1] == 1) {
Find(stateX, stateY+1);
}
if(field[stateX][stateY-1] == 1) {
Find(stateX, stateY-1);
}
}
}
}
'코딩 문제 > 백준' 카테고리의 다른 글
백준 - 1325번 (0) | 2021.03.17 |
---|---|
백준 - 1303번 (0) | 2021.03.16 |
백준 - 7785번 (0) | 2021.03.15 |
백준 - 6603번 (0) | 2021.03.15 |
백준 - 5568번 (0) | 2021.03.15 |