๐ŸŒžAlgorithm/๐Ÿ”ฅBaekjoon

[Baekjoon] 11967_๋ถˆ์ผœ๊ธฐ

๋ฟŒ์•ผ._. 2024. 2. 1. 11:40

Gold II

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

< ๋ถˆ์ผœ๊ธฐ >

 

๋ฌธ์ œ ํ’€์ด 

 

๋จผ์ € (1,1) ๋ฐฉ์—์„œ ์Šค์œ„์น˜๋ฅผ ํ†ตํ•ด ๋‹ค๋ฅธ ๋ฐฉ ๋ถˆ์„ ์ผ ๋‹ค. ๋ถˆ์ด ์ผœ์ง„ ๋ฐฉ์—์„œ ์ƒํ•˜์ขŒ์šฐ๋ฅผ ํƒ์ƒ‰ํ•˜์—ฌ ๋‹ค๋ฅธ ๋ฐฉ๊ณผ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธํ•œ๋‹ค. ๋‹ค๋ฅธ ๋ฐฉ๊ณผ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋‹ค๋ฉด ์ด ๋ฐฉ์—๋„ ์˜ฌ ์ˆ˜ ์žˆ๋‹ค๋Š” ๋œป์ด ๋œ๋‹ค. ํ•˜์ง€๋งŒ ๋‹ค๋ฅธ ๋ฐฉ๊ณผ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ์ง€ ์•Š๋‹ค๋ฉด ์ด ๋ฐฉ์€ ๋ถˆ๋งŒ ์ผค ์ˆ˜ ์žˆ๊ณ  ์ด ๋ฐฉ๊ณผ ์—ฐ๊ฒฐ๋œ ์Šค์œ„์น˜๋Š” ์กฐ์ ˆํ•  ์ˆ˜ ์—†๋‹ค. 

 

์ด๋ ‡๊ฒŒ๋งŒ ํƒ์ƒ‰์„ ํ•  ๊ฒฝ์šฐ ๋‹ค๋ฅธ ๋ฐฉ์— ์˜ํ•ด ๋ถˆ์ด ์ผœ์ง„ ๋ฐฉ์„ ๊ฐˆ ์ˆ˜ ์žˆ๋Š”์ง€ ์—†๋Š”์ง€ ํ™•์ธํ•  ์ˆ˜ ์—†์œผ๋ฏ€๋กœ ํ˜„์žฌ ๋ฐฉ์—์„œ ์ƒํ•˜์ขŒ์šฐ๋ฅผ ํƒ์ƒ‰ํ•ด ๋‹ค๋ฅธ ๋ฐฉ์œผ๋กœ ์ด๋™ ๊ฐ€๋Šฅํ•œ์ง€ ํ•œ๋ฒˆ ๋” ํŒ๋‹จํ•œ๋‹ค.

 

 

 my solution (Java)

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

public class _11967_ { // ๋ถˆ์ผœ๊ธฐ
	static boolean visited[][];
	static Room[][] arr;
	static int dx[] = { -1, 1, 0, 0 };
	static int dy[] = { 0, 0, -1, 1 };

	static class Room {
		private boolean light;
		private ArrayList<int[]> link;

		public Room(Boolean light, ArrayList<int[]> link) {
			this.light = light;
			this.link = link;
		}
	}

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

		int n = Integer.parseInt(st.nextToken());
		int m = Integer.parseInt(st.nextToken());

		arr = new Room[n + 1][n + 1];
		visited = new boolean[n + 1][n + 1];

		for (int i = 1; i <= n; i++) {
			for (int j = 1; j <= n; j++) {
				arr[i][j] = new Room(false, new ArrayList<>());
			}
		}

		for (int i = 0; i < m; i++) {
			st = new StringTokenizer(bf.readLine());

			int x = Integer.parseInt(st.nextToken());
			int y = Integer.parseInt(st.nextToken());
			int a = Integer.parseInt(st.nextToken());
			int b = Integer.parseInt(st.nextToken());

			arr[x][y].link.add(new int[] { a, b });
		}

		arr[1][1].light = true;
		visited[1][1] = true;

		System.out.println(bfs(1, 1));
	}

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

		int result = 1;

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

			for (int[] num : arr[pos[0]][pos[1]].link) {
				if (!arr[num[0]][num[1]].light) {
					result += 1;
					arr[num[0]][num[1]].light = true;

					for (int i = 0; i < 4; i++) {
						int a = num[0] + dx[i];
						int b = num[1] + dy[i];

						if (a >= 1 && a < arr.length && b >= 1 && b < arr.length && visited[a][b]) {
							visited[num[0]][num[1]] = true;
							queue.add(new int[] { num[0], num[1] });
							break;
						}
					}
				}
			}

			for (int i = 0; i < 4; i++) {
				int a = pos[0] + dx[i];
				int b = pos[1] + dy[i];

				if (a >= 1 && a < arr.length && b >= 1 && b < arr.length && arr[a][b].light && !visited[a][b]) {
					visited[a][b] = true;
					queue.add(new int[] { a, b });
				}
			}
		}
		return result;
	}
}
๋ณ€์ˆ˜)
visited : ๋ฐฉ๋ฌธ ์—ฌ๋ถ€
arr : ๊ฐ ์ขŒํ‘œ์— ํ•ด๋‹นํ•˜๋Š” ๋ฐฉ์˜ ์ •๋ณด๋ฅผ ์ €์žฅ 
dx, dy : ์ƒํ•˜์ขŒ์šฐ
n, m : N x N, ๋ฐฉ ์ •๋ณด
x, y, a, b : (x, y) ๋ฐฉ์—์„œ (a, b) ๋ฐฉ์˜ ๋ถˆ์„ ์ผœ๊ณ  ๋Œ ์ˆ˜ ์žˆ์Œ

 

Room

๋ถˆ ์ผœ์ง ์—ฌ๋ถ€์™€ ํ˜„์žฌ ๋ฐฉ์—์„œ ๋ถˆ์„ ์ผœ๊ณ  ๋Œ ์ˆ˜ ์žˆ๋Š” ๋ฐฉ ์ขŒํ‘œ๋ฅผ ์ €์žฅ

 

Main

n๊ณผ m์„ ์ž…๋ ฅ๋ฐ›์€ ํ›„ ๋จผ์ € NxN ํฌ๊ธฐ๋งŒํผ ๋ฐฐ์—ด์„ ๋งŒ๋“ค์–ด ์ดˆ๊ธฐํ™”ํ•œ๋‹ค. m ์ค„ ๋งŒํผ ๋ฐฉ ์ •๋ณด๋ฅผ ์ž…๋ ฅ๋ฐ›์•„ arr ๋ฐฐ์—ด์— ์ •๋ณด๋ฅผ ์ €์žฅํ•œ๋‹ค. (1,1)๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜๋ฏ€๋กœ ๋ฐฉ ๋ถˆ์„ ์ผœ๊ณ , ๋ฐฉ๋ฌธ ํ‘œ์‹œ๋ฅผ ํ•œ ํ›„ bfs ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•œ ํ›„ ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.

 

bfs (x์ขŒํ‘œ, y์ขŒํ‘œ)

(1,1) ์œ„์น˜๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜๊ธฐ ์œ„ํ•ด queue์— ์ถ”๊ฐ€ํ•˜๋ฉฐ (1,1) ๋ฐฉ๋„ ์ •๋‹ต์— ํฌํ•จํ•˜๋ฏ€๋กœ ์ดˆ๊ธฐ result๋ฅผ 1๋กœ ์„ ์–ธํ•œ๋‹ค. 

queue๊ฐ€ ๋นŒ ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณตํ•œ๋‹ค. queue์—์„œ ๊ฐ’์„ ํ•˜๋‚˜ ๋ฝ‘์•„์™€ ์ด ๋ฐฉ์—์„œ ์กฐ์ ˆํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋“ค์˜ ๋ถˆ์„ ์ผœ๊ณ , result๋„ +1 ํ•œ๋‹ค. ๋ฐฉ๋“ค์˜ ๋ถˆ์„ ์ผœ๋ฉด์„œ ์ƒˆ๋กœ ๋ถˆ์ด ์ผœ์ง„ ๋ฐฉ๋“ค์˜ ์œ„์น˜์—์„œ ์ƒํ•˜์ขŒ์šฐ๋ฅผ ํƒ์ƒ‰ํ•ด ๋‹ค๋ฅธ ๋ฐฉ์„ ์ด๋ฏธ ๋ฐฉ๋ฌธํ•œ ์ ์ด ์žˆ๋‹ค๋ฉด ์ƒˆ๋กœ ๋ถˆ์ด ์ผœ์ง„ ๋ฐฉ๋„ ๋ฐฉ๋ฌธํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ๋ฐฉ๋ฌธ ํ‘œ์‹œ ํ›„ queue์— ์ถ”๊ฐ€ํ•œ๋‹ค.

 

ํ˜„์žฌ ์œ„์น˜์—์„œ ์ƒํ•˜์ขŒ์šฐ๋ฅผ ํƒ์ƒ‰ํ•ด ๋ถˆ์ด ์ผœ์ง„ ๋ฐฉ์ด์ง€๋งŒ ์•„์ง ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์€ ๊ณณ์„ ์ฐพ์•„ ๋ฐฉ๋ฌธํ•œ๋‹ค.

 

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