백준

백준 1012 유기농 배추(Java)

Park DJ 2023. 2. 5. 21:11

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

 

1012번: 유기농 배추

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

www.acmicpc.net


 

해석 및 팁

 


 

이 문제는 dfs를 조금 응용하면 되는 문제입니다.

 


 

Java 코드

 


import java.util.Scanner;

public class Main {

  static StringBuilder sb;
  static int m;
  static int n;
  static int k;
  static boolean[][] arr;
  static boolean[][] visit;
  static int[] ud = {1, -1, 0, 0};
  static int[] lr = {0, 0, 1, -1};
  
  public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    
    int t = sc.nextInt();
    
    for(int i = 0; i < t; i++) {
      int count = 0;
      m = sc.nextInt();
      n = sc.nextInt();
      k = sc.nextInt();

      arr = new boolean[60][60];
      visit = new boolean[60][60];
      
      for(int j = 0; j < k; j++) {
        int x = sc.nextInt();
        int y = sc.nextInt();
        arr[x+1][y+1] = true; 
      }

      for(int x = 1; x <= m; x++) {
        for(int y = 1; y <= n; y++) {
          if(arr[x][y] == true && visit[x][y] == false) {
            count++;
            dfs(x, y);
          }
        }
      }
      
      System.out.println(count);
    }
  }

  static void dfs(int a, int b) {
    visit[a][b] = true;
    for(int i = 0; i < 4; i++) {
      int newa = a + lr[i];
      int newb = b + ud[i];
      if(arr[newa][newb] == true && visit[newa][newb] == false) dfs(newa, newb);
    }
  }
  
}