본문 바로가기

알고리즘/문제풀이

[1012] 유기농 배추

반응형

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


import java.util.Scanner;


// 1012 유기농 배추
public class Main {

	static int [][] arr;
	static boolean [][] visited;
	static int [][] temp = {{1,0},{0,1},{-1,0},{0,-1}};
	static int M, N, K;
	
	public static void main(String args[]) {
		Scanner sc = new Scanner(System.in);
		
		int T = sc.nextInt();
		
		for(int i=0; i<T; i++) {
			M = sc.nextInt();
			N = sc.nextInt();
			K = sc.nextInt();
			arr = new int[M][N];
			visited = new boolean[M][N];
			
			
			for(int j=0; j<K; j++) {
				int r = sc.nextInt();
				int c = sc.nextInt();
				arr[r][c] = 1;
			}
			
			
//			for(int j=0; j<M; j++) {
//				for(int k=0; k<N; k++) {
//					System.out.print(arr[j][k] + " ");
//				}
//				System.out.println();
//			}
			
			int cnt = 0;
			
			for(int j=0; j<M; j++) {
				for(int k=0; k<N; k++) {
					if(arr[j][k] == 0) continue;
					if(visited[j][k] == true) continue;
					DFS(j, k);
					cnt++;
				}
			}
			System.out.println(cnt);
		}
	}
	
	public static void DFS(int x, int y) {
		visited[x][y] = true;
		
		for(int i=0; i<4; i++) {
			int nextX = x+temp[i][0];
			int nextY = y+temp[i][1];
			
			if(isInside(nextX, nextY) && visited[nextX][nextY] == false && arr[nextX][nextY] == 1) {
				DFS(nextX, nextY);
			}
		}
	}
	
	public static boolean isInside(int x, int y) {
		if(x>=0 && x<M && y>=0 && y<N) return true;
		else return false;
	}
}

반응형

'알고리즘 > 문제풀이' 카테고리의 다른 글

[7562] 나이트의 이동  (0) 2019.04.02
[2293] 동전  (0) 2019.03.31
[1057] 토너먼트  (0) 2019.03.31
[1966] 프린터 큐  (0) 2019.03.31
[11403] 경로 찾기  (0) 2019.03.25