Algorithm

[Algorithm] 백준 알고리즘 1012 (유기농 배추)

HONGNEW 2020. 3. 28. 13:15

 

java 코드

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.LinkedList;
import java.util.Queue;
import java.util.StringTokenizer;

public class Main {
	
	static int T, M, N, K;
	static int map[][];
	static boolean visited[][];
	static int count;
	static Queue<int[]> q = new LinkedList<>();
	
	public static void main(String[] args) throws IOException {
		
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st = new StringTokenizer(br.readLine());
		T = Integer.parseInt(st.nextToken());
		
		while(T!=0) {
			st = new StringTokenizer(br.readLine());
			M=Integer.parseInt(st.nextToken());
			N=Integer.parseInt(st.nextToken());
			K=Integer.parseInt(st.nextToken());
			count=0;
			map = new int [M][N];
			visited = new boolean [M][N];
			
			while(K!=0) {
				st = new StringTokenizer(br.readLine());
				int x = Integer.parseInt(st.nextToken());
				int y = Integer.parseInt(st.nextToken());
				map[x][y]=1;
				K--;
			}
			
			for(int i=0; i<M; i++) {
				for(int j=0; j<N; j++) {
					
					if(map[i][j]==1) {
						q.add(new int[] {i,j});
						visited[i][j]=true;
						map[i][j]=0;
						count++;
						solve();
					}
				}
			}
			System.out.println(count);
			
			T--;
		}
	}
	static void solve() {
		int dx[] = {-1, 1, 0, 0};
		int dy[] = {0, 0, 1, -1};
		
		while(!q.isEmpty()) {
			int location[]=q.poll();
			int x = location[0];
			int y = location[1];
			for(int i=0; i<4; i++) {
				int xx=x+dx[i];
				int yy=y+dy[i];
				if(xx>=0&&xx<M&&yy>=0&&yy<N) {
					if(map[xx][yy]==1&&!visited[xx][yy]) {
						map[xx][yy]=0;
						visited[xx][yy]=true;
						q.add(new int[] {xx,yy});
					}
				}
			}
		}
	}
}