[백준] 1012 유기농 배추(DFS) - 자바카테고리 없음2024. 1. 9. 13:43
Table of Contents
1012번: 유기농 배추
차세대 영농인 한나는 강원도 고랭지에서 유기농 배추를 재배하기로 하였다. 농약을 쓰지 않고 배추를 재배하려면 배추를 해충으로부터 보호하는 것이 중요하기 때문에, 한나는 해충 방지에
www.acmicpc.net
import java.io.*;
import java.util.StringTokenizer;
public class Main {
static boolean[][] field; //밭
static int X, Y; //밭의 가로, 세로
static int[] dirX = {-1, 1, 0, 0};
static int[] dirY = {0, 0, -1, 1};
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int T = Integer.parseInt(br.readLine());
while (T-- > 0) {
StringTokenizer st = new StringTokenizer(br.readLine());
X = Integer.parseInt(st.nextToken());
Y = Integer.parseInt(st.nextToken());
int N = Integer.parseInt(st.nextToken());
field = new boolean[X+2][Y+2]; //맨앞 칸과 맨뒷칸을 비워두고 dfs애서 if범위 검사를 생략할 수 있다.
int count = 0; //배추흰지렁이 수 = 연결된 밭의 수
//밭에 배추를 심는다.
for (int i = 0; i < N; i++) {
st = new StringTokenizer(br.readLine());
int x = Integer.parseInt(st.nextToken()) + 1;
int y = Integer.parseInt(st.nextToken()) + 1;
field[x][y] = true;
}
//배추 밭 탐색
for (int i = 1; i <= X; i++) {
for (int j = 1; j <= Y; j++) {
if (field[i][j]) {
count++;
dfs(i, j);
}
}
}
bw.write(count + "\n");
}
br.close();
bw.close();
}
static void dfs(int y, int x) {
field[y][x] = false;
//상하좌우 탐색
for(int i=0; i<4; i++){
int newY = y + dirY[i];
int newX = x + dirX[i];
if(field[newY][newX])
dfs(newY, newX);
}
}
}
@뽀글뽀글 개발자 :: 뽀글뽀글 개발 일지
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!