본문 바로가기
코딩테스트/백준

[JAVA] 1012번 유기농 배추

by PEKAH 2021. 9. 19.

문제

https://www.acmicpc.net/problem/1012

 

1012번: 유기농 배추

차세대 영농인 한나는 강원도 고랭지에서 유기농 배추를 재배하기로 하였다. 농약을 쓰지 않고 배추를 재배하려면 배추를 해충으로부터 보호하는 것이 중요하기 때문에, 한나는 해충 방지에 

www.acmicpc.net

 

풀이

전형적인 BFS 풀이 문제이다. 상하좌우 4방 탐색을 하며 인접해 있는 경우끼리 묶어 값을 도출하였다.

 

import java.awt.Point;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.LinkedList;
import java.util.Queue;
import java.util.StringTokenizer;

public class 유기농배추 {
	static int M, N, K;
	static int arr[][];
	static boolean visited[][];
	static int dx[] = {-1, 1, 0, 0};
	static int dy[] = {0, 0, -1, 1};
	static int result;
	static Queue<Point> q;
	
	public static void bfs(int x, int y) {
		q = new LinkedList<Point>();
		Point v;
		
		q.offer(new Point(x, y));
		visited[x][y] = true;
		
		while(!q.isEmpty()) {
			v = q.poll();
			
			for (int i = 0; i < 4; i++) {
				int xx = v.x + dx[i];
				int yy = v.y + dy[i];
				
				if (xx < 0 || xx >= N || yy < 0 || yy >= M) continue;
				
				if (arr[xx][yy] == 1 && !visited[xx][yy]) {
					visited[xx][yy] = true;
					q.offer(new Point(xx, yy));
				}
			}
		}
	}
	
	public static void main(String[] args) throws Exception {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st;
		
		int T = Integer.parseInt(br.readLine());
		
		for (int test_case = 0; test_case < T; test_case++) {
			st = new StringTokenizer(br.readLine());
			M = Integer.parseInt(st.nextToken());
			N = Integer.parseInt(st.nextToken());
			K = Integer.parseInt(st.nextToken());
			
			arr = new int[N][M];
			visited = new boolean[N][M];
			result = 0;
			
			for (int i = 0; i < K; i++) {
				st = new StringTokenizer(br.readLine());
				int y = Integer.parseInt(st.nextToken());
				int x = Integer.parseInt(st.nextToken());
				arr[x][y] = 1;
			}
			
			for (int i = 0; i < N; i++) {
				for (int j = 0; j < M; j++) {
					if (arr[i][j] == 1 && !visited[i][j]) {
						bfs(i, j);
						result++;
					}
				}
			}
			
			System.out.println(result);
		}
	}
}

 

 

 

'코딩테스트 > 백준' 카테고리의 다른 글

[JAVA] 2178번 미로 탐색  (0) 2021.09.21
[JAVA] 1260번 DFS와 BFS  (0) 2021.09.20
[JAVA] 14501번 퇴사  (0) 2021.08.30
[JAVA] 14888번 연산자 끼워넣기  (0) 2021.08.29
[JAVA] 2468번 안전 영역  (0) 2021.08.28

댓글