본문 바로가기
알고리즘/백준 - 실버

백준 1012 유기농 배추

by 호롤롤로루야 2021. 9. 6.

백준 1012 유기농 배추

1. 문제 링크

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

 

1012번: 유기농 배추

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

www.acmicpc.net

 

2. 문제 해결에 대한 아이디어

  • input으로 들어온 2차원 배열을 순회하며 1(배추가 심어져 있는 땅)에 대해 BFS를 수행한다
  • BFS를 수행한 카운트를 출력한다.

 

3. 코드

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.LinkedList;
import java.util.Queue;

public class Main {

	static int M, N, K;
	static int[][] board;
	static boolean[][] visited;
	static Queue<Pair> q = new LinkedList<>();
	static int worm;
	static int[] dirY = {0, 0, 1, -1};
	static int[] dirX = {1, -1, 0, 0};
	public static void main(String[] args) throws NumberFormatException, IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		int T = Integer.parseInt(br.readLine().split(" ")[0]);
		for (int t = 0; t < T; t++) {
			String[] mnk = br.readLine().split(" ");
			M = Integer.parseInt(mnk[0]);
			N = Integer.parseInt(mnk[1]);
			K = Integer.parseInt(mnk[2]);

			board = new int[N][M];
			visited = new boolean[N][M];
			worm = 0;
			
			for (int k = 0; k < K; k++) {
				int y, x;
				String[] yx = br.readLine().split(" ");
				y = Integer.parseInt(yx[1]);
				x = Integer.parseInt(yx[0]);
				
				board[y][x] = 1;
				q.add(new Pair(y, x));
			}
			
			while(!q.isEmpty()) {
				Pair now = q.poll();
				if(visited[now.y][now.x])
					continue;
				BFS(now);
				++worm;
			}
			
			System.out.println(worm);
		}
	}
	
	static void BFS(Pair pair) {
		Queue<Pair> tq = new LinkedList<>();
		tq.add(pair);
		visited[pair.y][pair.x] = true;
		while(!tq.isEmpty()) {
			Pair now = tq.poll();
			
			for(int i = 0 ; i < 4 ; i++) {
				int yy = now.y + dirY[i];
				int xx = now.x + dirX[i];
				if(xx < 0 || yy < 0 || xx >= M || yy >= N || visited[yy][xx] || board[yy][xx] != 1)
					continue;
				visited[yy][xx] = true;
				tq.add(new Pair(yy, xx));
			}
		}
		
	}
}

class Pair{
	public int y, x;

	public Pair(int y, int x) {
		super();
		this.y = y;
		this.x = x;
	}

}
 

4. 채점 결과

 

5. 느낀 점

  • BFS를 사용하는 아주 기본적인 유형이었다.

 

'알고리즘 > 백준 - 실버' 카테고리의 다른 글

백준 6603 로또  (0) 2021.12.27
백준 7576 토마토  (0) 2021.09.07
백준 4963 섬의 개수  (0) 2021.09.06
백준 2468 안전 영역  (0) 2021.09.03
백준 2178 미로 탐색  (0) 2021.09.03

댓글