3 ๋ถ„ ์†Œ์š”

๐Ÿ“ [SW_1953] ํƒˆ์ฃผ๋ฒ” ๊ฒ€๊ฑฐ

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

public class Solution {

	// ์ขŒํ‘œ
	static class Node {
		int r;
		int c;

		public Node(int r, int c) {
			super();
			this.r = r;
			this.c = c;
		}
	}

	static int[] dr = { -1, 1, 0, 0 };
	static int[] dc = { 0, 0, -1, 1 };
	static int N, M, R, C, L;
	static int[][] map;
	static boolean[][] v;
	static int time;

	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringBuilder sb = new StringBuilder();
		StringTokenizer st = null;

		int T = Integer.parseInt(br.readLine());

		for (int tc = 1; tc <= T; tc++) {
			sb.append("#").append(tc).append(" ");

			st = new StringTokenizer(br.readLine(), " ");
			// ์„ธ๋กœ ํฌ๊ธฐ
			N = Integer.parseInt(st.nextToken());

			// ๊ฐ€๋กœ ํฌ๊ธฐ
			M = Integer.parseInt(st.nextToken());

			// ๋งจํ™€ ๋šœ๊ป‘ ์„ธ๋กœ ์œ„์น˜
			R = Integer.parseInt(st.nextToken());

			// ๋งจํ™€ ๋šœ๊ป‘ ๊ฐ€๋กœ ์œ„์น˜
			C = Integer.parseInt(st.nextToken());

			// ํƒˆ์ถœ ํ›„ ์†Œ์š”๋œ ์‹œ๊ฐ„
			L = Integer.parseInt(st.nextToken());

			// ์‹œ๊ฐ„
			time = L;

			// ํ„ฐ๋„์ง€๋„์ •๋ณด ๋ฐฐ์—ด
			map = new int[N][M];

			// ๋ฐฉ๋ฌธ ์—ฌ๋ถ€
			v = new boolean[N][M];

			// ํƒˆ์ฃผ๋ฒ”์ด ๊ฐˆ ์ˆ˜ ์žˆ๋Š” ์ด ๋งจํ™€๋šœ๊ป‘ ์ˆ˜ , 1์ธ ์ด์œ ๋Š” ์ฒ˜์Œ ๊ฐ’์€ ์ด๋ฏธ ํฌํ•จ
			cnt = 1;

			for (int i = 0; i < N; i++) {
				st = new StringTokenizer(br.readLine(), " ");
				for (int j = 0; j < M; j++) {
					map[i][j] = Integer.parseInt(st.nextToken());
				}
			}

			bfs(new Node(R, C));
			sb.append(cnt).append("\n");
		}
		System.out.println(sb);
	}

	static int nr, nc, type, cnt;

	// bfs
	static void bfs(Node node) {
		Queue<Node> q = new LinkedList<Node>();
		// ์ขŒํ‘œ ์‚ฝ์ž…
		q.offer(node);

		// ๋ฐฉ๋ฌธ ์ฒ˜๋ฆฌ ( ์ œ์ผ์ฒ˜์Œ ๋งจํ™€์ž๋ฆฌ )
		v[node.r][node.c] = true;


		while (!q.isEmpty()) {

			time--;
			// ์‹œ๊ฐ„ ์ดˆ๊ณผ
			if (time < 1)
				break;
			int size = q.size();

			// q๊ฐ€ ์—ฌ๋Ÿฌ๊ฐœ ๋„˜์–ด์™”์„ ์ˆ˜๋„
			for (int j = 0; j < size; j++) {
				Node n_node = q.poll();
				// ํ˜„์žฌ ํ–‰
				int r = n_node.r;
				// ํ˜„์žฌ ์—ด
				int c = n_node.c;

				// ๋ฐฐ์—ด ๊ฐ’์ด ๋ฐฉํ–ฅ์ด๋‹ค.
				type = map[r][c];

				for (int i = 0; i < 4; i++) {
					nr = r + dr[i];
					nc = c + dc[i];

					// ๋ฒ”์œ„๋ฅผ ๋ฒ—์–ด๋‚ฌ๊ฑฐ๋‚˜ ์ด๋ฏธ ๊ฐ„๊ณณ ์ด๊ฑฐ๋‚˜ ํŒŒ์ดํ”„๊ฐ€ ์—†๋Š” ๊ณณ
					if (nr < 0 || nc < 0 || nr > N - 1 || nc > M - 1 || v[nr][nc] || map[nr][nc] == 0)
						continue;
					// ๊ทธ ๋‹ค์Œ ๋ฐฉํ–ฅ
					int next_type = map[nr][nc];


					// ํ˜„์žฌ ๋ฐฉํ–ฅ์ด๋ž‘ ๊ทธ๋‹ค์Œ ๋ฐฉํ–ฅ์ด๋ž‘ ๊ฐ™์•„์•ผ ํ•œ๋‹ค
					switch (i) {
					// ์ƒ
					case 0:
						if (type == 1 || type == 2 || type == 4 || type == 7) {
							if (next_type == 1 || next_type == 2 || next_type == 5 || next_type == 6) {
								// ๋ฐฉ๋ฌธ์ฒดํฌ
								v[nr][nc] = true;
								// ํ์— ๋‹ค์‹œ ์‚ฝ์ž…
								q.offer(new Node(nr,nc));
								// ์นด์šดํŒ…
								cnt++;
							}
						}
						break;

					// ํ•˜
					case 1:
						if (type == 1 || type == 2 || type == 5 || type == 6) {
							if (next_type == 1 || next_type == 2 || next_type == 4 || next_type == 7) {
								// ๋ฐฉ๋ฌธ์ฒดํฌ
								v[nr][nc] = true;
								// ํ์— ๋‹ค์‹œ ์‚ฝ์ž…
								q.offer(new Node(nr,nc));
								// ์นด์šดํŒ…
								cnt++;
							}
						}
						break;

					// ์ขŒ
					case 2:
						if (type == 1 || type == 3 || type == 6 || type == 7) {
							if (next_type == 1 || next_type == 3 || next_type == 4 || next_type == 5) {
								// ๋ฐฉ๋ฌธ์ฒดํฌ
								v[nr][nc] = true;
								// ํ์— ๋‹ค์‹œ ์‚ฝ์ž…
								q.offer(new Node(nr,nc));
								// ์นด์šดํŒ…
								cnt++;
							}
						}
						break;

					// ์šฐ
					case 3:
						if (type == 1 || type == 3 || type == 4 || type == 5) {
							if (next_type == 1 || next_type == 3 || next_type == 6 || next_type == 7) {
								// ๋ฐฉ๋ฌธ์ฒดํฌ
								v[nr][nc] = true;
								// ํ์— ๋‹ค์‹œ ์‚ฝ์ž…
								q.offer(new Node(nr,nc));
								// ์นด์šดํŒ…
								cnt++;
							}
						}
						break;
					}
				}
			}
		}
	}
}

๐Ÿค” ๋‚˜์˜ ์ƒ๊ฐ

์‹œ๋ฎฌ๋ ˆ์ด์…˜ ๋ฌธ์ œ์ด๋‹ค.
๋ณด์ž๋งˆ์ž bfs๋ฅผ ํ™œ์šฉํ•˜์—ฌ ํ’€์–ด์•ผ๊ฒ ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ๊ณ 
์—ฌ๊ธฐ์„œ ์ค‘์š”ํ•œ ๊ฒƒ์€ ๋ฐฉํ–ฅ ํƒ์ƒ‰์ด๋‹ค.
๊ธฐ์กด ์—ฌ๋Ÿฌ ๋ฌธ์ œ๋“ค์€ ๊ทธ๋ƒฅ 4๋ฐฉํ–ฅ ํƒ์ƒ‰ํ•ด์„œ ๋ฐฉ๋ฌธ์ฒ˜๋ฆฌ๋‚˜ ์ œ์™ธ ์กฐ๊ฑด๋“ค์„ ๋„ฃ์—ˆ๋‹ค๋ฉด ์ด ๋ฌธ์ œ๋Š” ํŒŒ์ดํ”„ ๋•Œ๋ฌธ์— ๊ฒฝ์šฐ๋“ค์ด ์—ฌ๋Ÿฌ๊ฐœ ์ƒ๊ธด๋‹ค.

  1. ๋ฒ”์œ„๋ฅผ ๋ฒ—์–ด๋‚˜๋Š” ๊ฒฝ์šฐ
  2. ํŒŒ์ดํ”„๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ
  3. ํŒŒ์ดํ”„๊ฐ€ ์กด์žฌํ•˜๋Š”๋ฐ ์ง์ด ๋งž์ง€ ์•Š๋Š” ๊ฒฝ์šฐ
  4. ์ด๋ฏธ ๋ฐฉ๋ฌธํ–ˆ๋˜ ๊ฒฝ์šฐ ์ด ๊ฒฝ์šฐ๋“ค์„ ๊ณ ๋ คํ•ด์„œ ํ•˜์˜€๊ณ  ์ƒ, ํ•˜, ์ขŒ, ์šฐ ๋งˆ๋‹ค ํŒŒ์ดํ”„ ์ง๋“ค์„ ์ฐพ์•„ ํ˜„์žฌ ์œ„์น˜์˜ ํŒŒ์ดํ”„ ๋ชจ์–‘๊ณผ ๊ทธ ๋‹ค์Œ ์œ„์น˜์˜ ํŒŒ์ดํ”„ ๋ชจ์–‘์˜ ์ง์ด ๋งž์•„์•ผ ๋ฐฉ๋ฌธ์ฒ˜๋ฆฌ๋ฅผ ํ•ด์ฃผ๊ณ  ๋‹ค์‹œ ํ๋กœ ๋„ฃ์–ด์ฃผ๊ณ  ์นด์šดํŒ… ํ•ด์ฃผ์—ˆ๋‹ค.
    ๊ทธ๋ฆฌ๊ณ  ๋งˆ์ง€๋ง‰์œผ๋กœ ์‹œ๊ฐ„ ์ œํ•œ์ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์‹œ๊ฐ„์„ ์„ค์ •ํ•˜์˜€๋‹ค.