1012번: 유기농 배추
차세대 영농인 한나는 강원도 고랭지에서 유기농 배추를 재배하기로 하였다. 농약을 쓰지 않고 배추를 재배하려면 배추를 해충으로부터 보호하는 것이 중요하기 때문에, 한나는 해충 방지에
www.acmicpc.net
BFS를 이용해서 해결했다.
BFS의 개념 자체는 어렵지 않은데, 코드를 깔끔히 구현하는 방법을 모르겠다.
내가 생각한대로 코드를 작성해봤다.
좌표값을 Queue에 집어넣어야하는데, 방법을 모르고 qX, qY로 x, y 좌표를 각각 받았다.
Point라는 걸로 받으면 된다더라,,
그리고 나는 현재 depth에서 확인해야 할 노드의 개수를 그 전 depth에서 계산하고,
다음 depth에게 알려주는 방식으로 했는데 정석이 어떤지는 확인해봐야겠다!
package BOJ;
import java.util.ArrayDeque;
import java.util.Queue;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int T = sc.nextInt();
for (int t = 0; t < T; t++) {
int m = sc.nextInt();
int n = sc.nextInt();
int k = sc.nextInt();
int [][] farm = new int[n][m];
for (int i = 0; i < k; i++) {
int x = sc.nextInt();
int y = sc.nextInt();
farm[y][x] = 1;
}
int [] di = {1, -1, 0, 0};
int [] dj = {0, 0, 1, -1};
int ans = 0;
Queue<Integer> qX;
Queue<Integer> qY;
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
if (farm[i][j] == 1) {
farm[i][j] = -1; // visit
ans++; // if visit
qX = new ArrayDeque<>();
qY = new ArrayDeque<>();
qX.offer(i); // initial value
qY.offer(j);
int nodes; // check nodes
int cnt = 1;
while (true) {
nodes = cnt;
cnt = 0;
while (nodes != 0) {
for (int d = 0; d < 4; d++) {
int ni = qX.peek() + di[d];
int nj = qY.peek() + dj[d];
if (ni >= 0 && ni < n && nj >= 0 && nj < m) {
if (farm[ni][nj] == 1) {
qX.offer(ni);
qY.offer(nj);
cnt++;
farm[ni][nj] = -1;
}
}
}
qX.poll();
qY.poll();
nodes--;
}
if (qX.isEmpty()) break;
}
}
}
}
System.out.println(ans);
}
}
}
'BOJ' 카테고리의 다른 글
[BOJ] [JAVA] 1753번 최단경로 (1) | 2024.02.15 |
---|---|
[BOJ] [JAVA] 11003번 최소값 찾기 (1) | 2024.02.10 |
[BOJ] [JAVA] 1167번 트리의 지름 (1) | 2024.02.07 |
[BOJ] [JAVA] 14442번 벽 부수고 이동하기 2 (1) | 2024.01.27 |
[BOJ] [JAVA] 4779번 칸토어 집합 (1) | 2024.01.14 |
[BOJ] [JAVA] 24060번 알고리즘 수업 - 병합 정렬 1 (0) | 2024.01.14 |
[BOJ] [JAVA] 20920번 영단어 암기는 괴로워 (0) | 2024.01.14 |
[BOJ] [JAVA] 1016번 제곱 ㄴㄴ 수 (2) | 2024.01.11 |