๐ŸŒžAlgorithm/๐Ÿ”ฅBaekjoon

[Baekjoon] 28471_Wํ‚ค๊ฐ€ ๋น ์ง„ ์„ฑ์›์ด

๋ฟŒ์•ผ._. 2024. 4. 9. 20:01

Silver I

๋ฌธ์ œ(์ถœ์ฒ˜: https://www.acmicpc.net/problem/28471)

< Wํ‚ค๊ฐ€ ๋น ์ง„ ์„ฑ์›์ด >

 

๋ฌธ์ œ ํ’€์ด 

 

F์—์„œ๋ถ€ํ„ฐ ์ด๋™ํ•ด์„œ ๊ฐˆ ์ˆ˜ ์žˆ๋Š” ๊ณณ์„ ์ฐพ๋Š”๋‹ค. ๋‹จ, ์œ„์ชฝ์œผ๋กœ 1์นธ ์ด๋™ํ•˜๋Š” Wํ‚ค๊ฐ€ ๊ณ ์žฅ๋‚œ ๊ฒƒ์ด๋ฏ€๋กœ F์—์„œ ์ด๋™ํ•  ๋•Œ๋Š” ์•„๋ž˜๋กœ 1์นธ ์ด๋™ํ•˜๋Š” ๊ฒƒ์„ ์ œ์™ธํ•œ๋‹ค.

 

 my solution (Java)

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

public class _28471_ { // Wํ‚ค๊ฐ€ ๋น ์ง„ ์„ฑ์›์ด
	static int dx[] = { -1, 0, 0, -1, 1, -1, 1 };
	static int dy[] = { 0, -1, 1, 1, 1, -1, -1 };
	static int n;
	static boolean visited[][];

	public static void main(String[] args) throws IOException {
		BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));

		n = Integer.parseInt(bf.readLine());

		char arr[][] = new char[n][n];
		visited = new boolean[n][n];
		int x = 0, y = 0;

		for (int i = 0; i < n; i++) {
			String str = bf.readLine();
			for (int j = 0; j < n; j++) {
				arr[i][j] = str.charAt(j);
				if (arr[i][j] == 'F') {
					x = i;
					y = j;
					visited[x][y] = true;
				} else if (arr[i][j] == '#') {
					visited[i][j] = true;
				}
			}
		}

		System.out.println(bfs(x, y));
	}

	private static int bfs(int x, int y) {
		Queue<int[]> queue = new LinkedList<>();
		queue.add(new int[] { x, y });
		int cnt = 0;

		while (!queue.isEmpty()) {
			int temp[] = queue.poll();
			for (int i = 0; i < 7; i++) {
				int a = temp[0] + dx[i];
				int b = temp[1] + dy[i];

				if (a >= 0 && a < n && b >= 0 && b < n) {
					if (!visited[a][b]) {
						cnt += 1;
						visited[a][b] = true;
						queue.add(new int[] { a, b });
					}
				}
			}
		}
		return cnt;
	}
}
๋ณ€์ˆ˜)
n : ๊ฒŒ์ž„ํŒ์˜ ํฌ๊ธฐ
arr : ๊ฒŒ์ž„ํŒ ์ •๋ณด
visited : ๋ฐฉ๋ฌธ ์—ฌ๋ถ€
x, y : ๋ชฉ์ ์ง€ ์ขŒํ‘œ

 

๊ฒŒ์ž„ํŒ ํฌ๊ธฐ n์„ ์ž…๋ ฅ๋ฐ›๋Š”๋‹ค. ๊ฒŒ์ž„ํŒ ํฌ๊ธฐ๋งŒํผ ๊ฒŒ์ž„ํŒ์˜ ์ •๋ณด๋ฅผ ์ž…๋ ฅ๋ฐ›์•„ arr์— ์ €์žฅํ•œ๋‹ค. ์ €์žฅํ•˜๋ฉด์„œ ๋ชฉ์ ์ง€ ์œ„์น˜๋ฅผ ์ฐพ์•„ x, y ์ขŒํ‘œ์— ์ €์žฅํ•˜๊ณ , ์ด๋™ํ•  ์ˆ˜ ์—†๋Š” ๊ณต๊ฐ„์„ ๋ฏธ๋ฆฌ ์ฐพ์•„ visited ๋ฐฐ์—ด์— ๋ฐฉ๋ฌธ ํ‘œ์‹œ๋ฅผ ํ•œ๋‹ค. ๋ชฉ์ ์ง€ ์ขŒํ‘œ๋ฅผ bfsํ•จ์ˆ˜์˜ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ๋„˜๊ฒจ์ค€๋‹ค. bfsํ•จ์ˆ˜ ํ˜ธ์ถœํ•œ ํ›„ ๋ฐ˜ํ™˜๊ฐ’์„ ์ •๋‹ต์œผ๋กœ ์ถœ๋ ฅํ•œ๋‹ค.

 

bfs(int x, int y)

Queue์— ์‹œ์ž‘ ์ขŒํ‘œ์ธ x, y ๋ฐฐ์—ด์„ ์ €์žฅํ•œ๋‹ค. ํ๊ฐ€ ๋นŒ ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณตํ•˜๋ฉฐ ๋‹ค์Œ ๊ณผ์ •์„ ๋ฐ˜๋ณตํ•œ๋‹ค.

 

1) queue poll

2) ์•„๋ž˜๋กœ 1์นธ ์ด๋™ํ•˜๋Š” ๊ฒƒ์„ ์ œ์™ธํ•œ 7๊ฐ€์ง€ ๋ฐฉํ–ฅ์œผ๋กœ ์ด๋™ํ•œ๋‹ค.

3) ์ด๋™ํ•œ ๊ฐ’์ด ๊ฒŒ์ž„ํŒ ๋ฒ”์œ„ ์•ˆ์ด๋ฉฐ, ์•„์ง ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์€ ๊ณณ์ด๋ผ๋ฉด ๋ฐฉ๋ฌธ ํ‘œ์‹œ ๋ฐ cnt+1์„ ํ•˜๊ณ  queue์— ์ €์žฅํ•œ๋‹ค.

 

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