한 걸음 두 걸음

백준 1012 ] 유기농배추 DFS (JAVA) 본문

CSE/baekjoon & swexpert

백준 1012 ] 유기농배추 DFS (JAVA)

언제나 변함없이 2019. 5. 27. 21:08
반응형
import java.util.*;
import java.lang.*;

public class Main {

    static boolean[][] board = new boolean [50][50];
    static int[][] dir = {{-1, 0},{0, -1},{0, 1},{1, 0}};
    static int row,col;

    public static void main(String[] args) {

        Scanner sc = new Scanner(System.in);
        int cnt; //입력받을 배추갯수
        int result = 0; //결과값

        int testCase = sc.nextInt();

        //테스트케이스만큼
        for(int test = 0; test < testCase; test++) {
            row = sc.nextInt(); //가로 크기
            col = sc.nextInt(); //세로 크기
            cnt = sc.nextInt(); //배추갯수

            //board세팅
            for(int count = 0; count < cnt; count++) {
                int locI = sc.nextInt();
                int locJ = sc.nextInt();
                board[locI][locJ] = true;
            }

            //row, col 검사하기
            for(int i = 0 ; i < row; i ++) {
                for( int j = 0 ; j < col; j ++) {
                    if(board[i][j]) {
                        dfs(i,j); //하고나면 연결된 board의 배추들이 모두 false가 됩니다.
                        result++;
                        }
                }
            }
            //testCase가 한 번씩 끝날 때마다 결과값 출력 후
            System.out.println(result);
            //다음 케이스를 위해 초기화
            result = 0;

        }

    }

    //관련된 아이들을 모두 0으로 바꿔주기위한 검사함수 
    static void dfs(int i, int j) {
        board[i][j] = false;

        for(int d = 0; d < 4; d++) {
            int ti = i + dir[d][0];
            int tj = j + dir[d][1];
            if(isVal(ti, tj)) 
                dfs(ti, tj);

        }
    }
    //유효한값인지 검사하는 함수
    static boolean isVal(int ti, int tj) {
        if(ti >=0 && tj >=0 && ti < row && tj < col && board[ti][tj])
            return true;
        return false;
    }
}
반응형