본문 바로가기

PS

[BOJ] 1012번 : 유기농 배추(DFS)

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

 

1012번: 유기농 배추

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

www.acmicpc.net

 

알고리즘 분류 : DFS, BFS

 

더보기
public class Main {
    static Myscanner sc = new Myscanner();
    static PrintWriter out = new PrintWriter(new BufferedOutputStream(System.out));
    static int[][] farm = new int[51][51];
    static boolean[][] visited = new boolean[51][51];
    static int M, N, K;

    public static void main(String[] args) {

        int T = sc.nextInt();
        for (int tc = 0; tc < T; tc++) {

            M = sc.nextInt();
            N = sc.nextInt();
            K = sc.nextInt();

            for (int warm = 0; warm < K; warm++) {
                int x = sc.nextInt();
                int y = sc.nextInt();
                farm[y][x] = 1;
            }
            int cnt = 0;
            for (int r = 0; r < N; r++) {
                for (int c = 0; c < M; c++) {
                    if (farm[r][c] != 0 && !visited[r][c]) {
                        cnt++;
                        DFS(r, c);
                    }
                }
            }
            out.println(cnt);
            for (int i = 0; i < 51; i++) {
                Arrays.fill(farm[i], 0);
                Arrays.fill(visited[i], false);
            }

        }
        out.close();

    }

    private static void DFS(int r, int c) {

        if (r < 0 || r > N || c < 0 || c > M || visited[r][c] || farm[r][c] == 0)
            return;
        
        visited[r][c] = true;
        
        DFS(r - 1, c);
        DFS(r + 1, c);
        DFS(r, c - 1);
        DFS(r, c + 1);
    }
}

예전에는 BFS로 모든 문제를 해결해 나가려고 했는데 DFS로 한번 해결해보았다.

 

문제에서 주어지는 M (가로길이), N(세로 길이)와 배추의 위치가 (x, y) 좌표가 아닌 (y, x) 좌표인 것을 조심하면 쉽게 통과할 수 있다.

'PS' 카테고리의 다른 글

[BOJ] 11049번: 행렬 곱셈 순서  (0) 2017.06.08
[BOJ] 2667번: 단지번호붙이기(DFS)  (0) 2017.06.07
[BOJ] 1260번 : DFS와 BFS  (0) 2017.06.07
[BOJ]1697번 - 숨바꼭질  (0) 2017.06.06
[BOJ] 2568번 : 전깃줄 - 2  (0) 2017.06.01