본문 바로가기
Problem Solving/BOJ

백준-1012 유기농 배추

by 채니_ 2021. 2. 14.

www.acmicpc.net/problem/1012

 

1012번: 유기농 배추

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

www.acmicpc.net


DFS를 사용하여 풀이

arr[i][j]의 값이 1이고 방문X라면

배추흰지렁이수 +1 & DFS수행하여 인접배추밭에 방문체크함.


import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.util.Scanner;

public class 유기농배추 {
	static int M,N,K;
	static int [][]arr;//배추밭
	static boolean [][] visit;//방문배열
	static int bachunum;//배추흰지렁이의 수 
	public static void main(String[] args) throws FileNotFoundException {
		System.setIn(new FileInputStream("input/유기농배추.txt"));
		Scanner sc = new Scanner(System.in);
		int T = sc.nextInt();
		for (int tc = 0; tc < T; tc++) {
			M=sc.nextInt();//가로길이
			N=sc.nextInt();//세로길이
			K=sc.nextInt();//배추가심어져있는 위치의 개수
			arr= new int[N][M];//인덱스 0부터시작
			visit = new boolean[N][M];//방문배열초기화
			bachunum=0;//배추흰지렁이의 수 초기화
			for (int i = 0; i < K; i++) {//K만큼 연산수행
				int n1=sc.nextInt();//열
				int n2=sc.nextInt();//행
				arr[n2][n1]=1;//행,열에 1입력
			}
			for (int i = 0; i < N; i++) {
				for (int j = 0; j < M; j++) {
					if(arr[i][j]==1 && !visit[i][j]) {//만약 1이고 방문x라면
						bachunum++;//배추흰지렁이 수 증가
						//여기서 dfs는 근처가 1인거의 방문체크를해주는역할
						dfs(i,j);
					}
				}
			}
			System.out.println(bachunum);//배추흰지렁이 갯수
			
		}
	}
	static int []dr = {-1,1,0,0};//상하좌우
	static int []dc = {0,0,-1,1};
	private static void dfs(int i, int j) {
		visit[i][j]=true;
		for (int k = 0; k <4; k++) {//사방탐색
			int nr = i+dr[k];
			int nc = j+dc[k];
			if(nr>=0 && nr<N && nc>=0 && nc<M && arr[nr][nc]==1 && !visit[nr][nc]) {//범위체크, 근처1, 방문X라면 
				dfs(nr,nc);
			}
		}
		
	}
	

}

'Problem Solving > BOJ' 카테고리의 다른 글

백준 2961 도영이가 만든 맛있는 음식  (0) 2021.02.15
백준- 2178 미로탐색  (0) 2021.02.14
백준-2667 단지번호붙이기  (0) 2021.02.14
백준-2999번 비밀이메일  (0) 2021.02.13
백준- 3985번 롤케이크  (0) 2021.02.13

댓글