๐ŸŒžAlgorithm/๐Ÿ”ฅBaekjoon

[Baekjoon] 11260_Cell Counting

๋ฟŒ์•ผ._. 2025. 9. 17. 10:52
๋ฌธ์ œ(์ถœ์ฒ˜: https://www.acmicpc.net/problem/11260)

< Cell Counting >

 

๋ฌธ์ œ ํ’€์ด 

 

bfs๋ฅผ ํ™œ์šฉํ•˜์—ฌ 8๋ฐฉํ–ฅ์— ์•„๋ฌด๊ฒƒ๋„ ์—†๋Š”์ง€ ํ™•์ธํ•œ๋‹ค.

 

my solution (Java)

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.LinkedList;
import java.util.Queue;
import java.util.StringTokenizer;

public class _11260_ { // Cell Counting

	public static void main(String[] args) throws IOException {
		BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
		StringTokenizer st;

		String str = "";

		while (!(str = bf.readLine()).equals("0 0")) {
			st = new StringTokenizer(str);

			int r = Integer.parseInt(st.nextToken());
			int c = Integer.parseInt(st.nextToken());

			char arr[][] = new char[r][c];
			Queue<int[]> queue = new LinkedList<>();

			for (int i = 0; i < r; i++) {
				str = bf.readLine();
				for (int j = 0; j < c; j++) {
					arr[i][j] = str.charAt(j);
					if (arr[i][j] == '#') {
						queue.add(new int[] { i, j });
					}
				}
			}
			bw.write(bfs(queue, arr) + "\n");
		}
		bw.flush();
	}

	private static int bfs(Queue<int[]> queue, char[][] arr) {

		int dx[] = { -1, 1, 0, 0, -1, -1, 1, 1 };
		int dy[] = { 0, 0, -1, 1, -1, 1, -1, 1 };

		int result = 0;

		while (!queue.isEmpty()) {
			int position[] = queue.poll();

			boolean flag = false;

			for (int i = 0; i < 8; i++) {
				int x = position[0] + dx[i];
				int y = position[1] + dy[i];

				if (x >= 0 && x < arr.length && y >= 0 && y < arr[0].length && arr[x][y] == '#') {
					flag = true;
					break;
				}
			}

			if (!flag) {
				result += 1;
			}
		}
		return result;
	}
}
๋ณ€์ˆ˜)
r, c : ํ–‰, ์—ด
arr : ํ”ฝ์…€ ๋ฐ์ดํ„ฐ
queue : ์„ธํฌ ์œ„์น˜๋“ค
dx, dy : 8๋ฐฉํ–ฅ
result : ์•”์„ธํฌ ๊ฐœ์ˆ˜
position : ์„ธํฌ ์œ„์น˜
flag : ์•”์„ธํฌ ์—ฌ๋ถ€

 

Main

"0 0"์ด ์ž…๋ ฅ๋˜๊ธฐ ์ „๊นŒ์ง€ ํ–‰, ์—ด์„ ์ž…๋ ฅ๋ฐ›๋Š”๋‹ค. ํ–‰, ์—ด๋งŒํผ ํ”ฝ์…€ ๋ฐ์ดํ„ฐ๋ฅผ ์ž…๋ ฅ๋ฐ›์•„ ๋ฐฐ์—ด arr์— ์ €์žฅํ•˜๋ฉด์„œ ์„ธํฌ๋ผ๋ฉด Queue์—๋„ ์œ„์น˜๋ฅผ ์ €์žฅํ•œ๋‹ค. ์ตœ์ข… bfs๋ฅผ ํ˜ธ์ถœํ•œ ๊ฒฐ๊ด๊ฐ’์„ ์ถœ๋ ฅํ•œ๋‹ค.

 

bfs(Queue <int []> queue, char [][] arr)

queue๊ฐ€ ๋นŒ ๋•Œ๊นŒ์ง€ ๋‹ค์Œ ๊ณผ์ •์„ ๋ฐ˜๋ณตํ•œ๋‹ค.

 

1) queue poll

2) 8๋ฐฉํ–ฅ ํƒ์ƒ‰ ํ›„ arr ๋ฒ”์œ„ ์•ˆ์ด๋ฉฐ ๊ฐ’์ด '#'๋ผ๋ฉด ์•”์„ธํฌ๊ฐ€ ์•„๋‹ˆ๋ฏ€๋กœ flag๋ฅผ true๋กœ ์ €์žฅ

3) ์•”์„ธํฌ๋ผ๋ฉด result+1

 

์ตœ์ข… result๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.