티스토리 뷰

1012. 유기농 배추

www.acmicpc.net/problem/1012

 

1012번: 유기농 배추

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

www.acmicpc.net

 

import java.io.*;
import java.util.*;

// 210212

public class Main_BJ_1012_유기농배추 {

	static int M, N, K;
	static int[][] map;
	static boolean[][] visited;
	static int cnt;
	static int[] dr = {-1, 0, 1, 0};
	static int[] dc = {0, -1, 0, 1};
	static Queue<Integer[]> q;

	static void printMap() {
		for(int r=0; r<M; r++) {
			for(int c=0; c<N; c++) {
				System.out.print(map[r][c] + " ");
			}
			System.out.println();
		}
	}

	static void dfs(int r, int c) {
		visited[r][c] = true;

		for(int d=0; d<4; d++) {
			int nr = r + dr[d];
			int nc = c + dc[d];

			if (nr>=0 && nr<M && nc>=0 && nc<N 
					&& map[nr][nc]==1 && !visited[nr][nc]) {
				visited[nr][nc] = true;
				dfs(nr, nc);
			}

		}
	}

	static void bfs(int r, int c) {
		q.offer(new Integer[] {r, c});
		visited[r][c] = true;

		while (!q.isEmpty()) {
			Integer[] v = q.poll();

			for(int d=0; d<4; d++) {
				int nr = v[0] + dr[d];
				int nc = v[1] + dc[d];

				if (nr>=0 && nr<M && nc>=0 && nc<N 
						&& map[nr][nc]==1 && !visited[nr][nc]) {
					visited[nr][nc] = true;
					q.offer(new Integer[] {nr, nc});
				}
			}
		}

	}

	public static void main(String[] args) throws Exception {
		System.setIn(new FileInputStream("res/input_BJ_1012_유기농배추.txt"));
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st = null;

		int T = Integer.parseInt(br.readLine());

		for(int tc=1; tc<=T; tc++) {
			st = new StringTokenizer(br.readLine(), " ");
			M = Integer.parseInt(st.nextToken()); // 가로 길이
			N = Integer.parseInt(st.nextToken()); // 세로 길이
			K = Integer.parseInt(st.nextToken()); // 배추 위치 개수

			map = new int[M][N];
			visited = new boolean[M][N];
			cnt = 0;
			q = new ArrayDeque<Integer[]>();

			for(int i=0; i<K; i++) {
				st = new StringTokenizer(br.readLine(), " ");
				int r = Integer.parseInt(st.nextToken()); 
				int c = Integer.parseInt(st.nextToken()); 
				map[r][c] = 1;
			}

			for(int r=0; r<M; r++) {
				for(int c=0; c<N; c++) {
					if (map[r][c]==0) {
						visited[r][c] = true;
					} else {
						if (!visited[r][c]) {
							++cnt;
							visited[r][c] = true;
							// dfs(r, c);
							bfs(r, c);
						}
					}
				}
			}

			System.out.println(cnt);
		} // for

		br.close();
	} // main
}

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

[BJ] 13300번: 방 배정  (0) 2021.02.22
[BJ] 2108. 통계학  (0) 2021.02.15
[BJ] 2178. 미로 탐색  (0) 2021.02.15
[BJ] 1697. 숨바꼭질  (0) 2021.02.15
[BJ] 7562. 나이트의 이동  (0) 2021.02.15
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/09   »
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
글 보관함