2 ๋ถ„ ์†Œ์š”

๐Ÿ“ [G3_16236] ์•„๊ธฐ ์ƒ์–ด

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 Main {
	static int[][] map;
	static int N;
	static int[] dx = { 0, -1, 0, 1 };
	static int[] dy = { -1, 0, 1, 0 };

	static class Node {
		int x;
		int y;

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

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

		// **** input start ****
		N = Integer.parseInt(br.readLine());

		map = new int[N][N];

		// ์•„๊ธฐ์ƒ์–ด
		Node shark = null;

		for (int i = 0; i < N; i++) {
			st = new StringTokenizer(br.readLine(), " ");
			for (int j = 0; j < N; j++) {
				map[i][j] = Integer.parseInt(st.nextToken());
				// ์ƒ์–ด ์œ„์น˜ ์ง€์ •
				if (map[i][j] == 9) {
					// ์ƒ์–ด ์œ„์น˜ ์ €์žฅํ•˜๊ณ  0์œผ๋กœ ์ดˆ๊ธฐํ™” - ์ง€๋‚˜๊ฐˆ ์ˆ˜ ์žˆ๊ฒŒ
					shark = new Node(j, i);
					map[i][j] = 0;
				}
			}
		}

		// **** input end ****
		int res = bfs(shark);

		System.out.println(res);
	} // main end

	static int bfs(Node shark) {
		int ans = 0;
		// ์ƒ์–ดํฌ๊ธฐ
		int sharkSize = 2;
		// ์ƒ์–ดํฌ๊ธฐ์กฐ์ ˆ ๋ณ€์ˆ˜
		int cnt = 0;

		while (true) {
			// ๋‹ค์Œ ๋จน์„ ๋ฌผ๊ณ ๊ธฐ ์œ„์น˜
			int x = Integer.MAX_VALUE;
			int y = Integer.MAX_VALUE;
			int d = Integer.MAX_VALUE;

			Queue<Node> queue = new LinkedList<Node>();
			// ์ด๋™๊ฑฐ๋ฆฌ ์ €์žฅ ๋ฐฐ์—ด
			int[][] distance = new int[N][N];

			// ํ˜„์žฌ ์•„๊ธฐ์ƒ์–ด ์œ„์น˜๋ถ€ํ„ฐ ์ €์žฅ
			queue.add(shark);

			// bfs ํƒ์ƒ‰
			while (!queue.isEmpty()) {
				Node current = queue.poll();

				// 4๋ฐฉํ–ฅ ํƒ์ƒ‰
				int nx, ny;
				for (int i = 0; i < 4; i++) {
					nx = current.x + dx[i];
					ny = current.y + dy[i];

					// ๋ฒ”์œ„๋ฅผ ๋„˜๊ฑฐ๋‚˜ ์ž์‹ ๋ณด๋‹ค ํฐ ๋ฌผ๊ณ ๊ธฐ๊ฑฐ๋‚˜ ์ด๋ฏธ ๋ฐฉ๋ฌธํ•œ ์œ„์น˜๋Š” x
					if (nx < 0 || ny < 0 || nx > N - 1 || ny > N - 1 || map[ny][nx] > sharkSize
							|| distance[ny][nx] != 0)
						continue;

					// ์ด๋™ ํšŸ์ˆ˜ ์ €์žฅ
					distance[ny][nx] = distance[current.y][current.x] + 1;

					// ์šฐ์„  ์ˆœ์œ„ ์ง€์ •
					if(map[ny][nx] != 0 && map[ny][nx] < sharkSize) {
						// ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ๋ฌผ๊ณ ๊ธฐ๋ฅผ ๋จน๋Š”๋‹ค
						if(d > distance[ny][nx]) {
							d = distance[ny][nx];
							x = nx;
							y = ny;
						}
						// ๊ฑฐ๋ฆฌ๊ฐ€ ๊ฐ™์€ ๊ฒฝ์šฐ
						else if(d == distance[ny][nx]) {
							// ๊ฐ€์žฅ ์™ผ์ชฝ์— ์žˆ๋Š” ๋ฌผ๊ณ ๊ธฐ
							if(y == ny) {
								if(x > nx) {
									x = nx;
									y = ny;
								}
							}
							// ๊ฐ€์žฅ ์œ„์— ์žˆ๋Š” ๋ฌผ๊ณ ๊ธฐ
							else if(y > ny) {
								x = nx;
								y = ny;
							}
						}
					}
					queue.add(new Node(nx, ny));
				}
			}

			// ๋จน์„ ๋ฌผ๊ณ ๊ธฐ๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ
			if(x==Integer.MAX_VALUE && y == Integer.MAX_VALUE) {
				break;
			}

			// ์‹œ๊ฐ„ ์ถ”๊ฐ€, ์ขŒํ‘œ 0์œผ๋กœ
			ans += distance[y][x];
			map[y][x] = 0;

			// ์ขŒํ‘œ ๊ฐฑ์‹  - ์ด๋™ํ•œ ๊ณณ์œผ๋กœ
			shark.x = x;
			shark.y = y;

			// ๋จน์€ ๊ฒƒ ์ถ”๊ฐ€
			cnt++;

			// ์ƒ์–ด ํฌ๊ธฐ ์ฆ๊ฐ€
			if(cnt == sharkSize) {
				sharkSize++;
				cnt = 0;
			}
		}

		return ans;
	}
} // class end

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

์ฒ˜์Œ์— ๋ฌธ์ œ๋ฅผ ์ดํ•ดํ•˜๊ณ  DFS๋กœ ํ’€์—ˆ์ง€๋งŒโ€ฆ ์ค‘๊ฐ„์— ์šฐ์„ ์ˆœ์œ„ ์ง€์ •์„ ํ•ด๊ฒฐํ•˜์ง€ ๋ชปํ•ด์„œ ํ…Œ์ŠคํŠธ์ผ€์ด์Šค 1~3๊นŒ์ง€๋Š” ๋งž์•˜์ง€๋งŒ ๋’ค์—๊ฒƒ๋“ค์€ ๋‹ค ํ‹€๋ ธ๋”ฐ.. ๋ฐฉ๋ฒ•์„ ์ฐพ์•„๋‚ด์ง€ ๋ชปํ–ˆ๋‹ค..

๊ทธ๋ž˜์„œ ์ฐพ์•„๋ณด๋‹ˆ bfs๋ฅผ ์ด์šฉํ•ด์„œ ํ‘ผ ๊ฒƒ์„ ๋ณด๊ณ  ํ’€์–ด๋ณด์•˜๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ด๋™๊ฑฐ๋ฆฌ ์ €์žฅ ๋ฐฐ์—ด์„ ํ™œ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ๊ฒŒ ๋˜์—ˆ๋‹ค.

  • ํ˜„์žฌ ์•„๊ธฐ์ƒ์–ด ์œ„์น˜๋ฅผ ์ €์žฅํ•˜๊ณ  , map ์— 0 ์œผ๋กœ ์ง€์ • ( ์ง€๋‚˜๊ฐˆ ์ˆ˜ ์žˆ๊ฒŒ )
  • BFS๋ฅผ ํ™œ์šฉํ•ด ์กฐ๊ฑด๋“ค์„ ๊ณ ๋ คํ•œ ๋’ค ์กฐ๊ฑด์— ๋ถ€ํ•ฉํ•˜๋ฉด ์ด๋™๊ฑฐ๋ฆฌ ์ €์žฅ ๋ฐฐ์—ด์— ๊ฐ’์„ ์ €์žฅํ•œ๋‹ค.
  • ๊ทธ๋ฆฌ๊ณ  ์šฐ์„ ์ˆœ์œ„ ์ฒดํฌ๋ฅผ ํ†ตํ•ด ๋ฌผ๊ณ ๊ธฐ๋ฅผ ๋จน์„ ์ˆœ์„œ๋ฅผ ์ •ํ•ด์ค€๋‹ค.
  • ๋‹ค ๋Œ๊ณ ๋‚˜์„œ ์‹œ๊ฐ„์„ ์ถ”๊ฐ€ํ•ด์ฃผ๊ณ  ์ขŒํ‘œ ๊ฐฑ์‹ ์„ ํ•ด์ฃผ๊ณ  ์ƒ์–ด ํฌ๊ธฐ๋ฅผ ์ฒดํฌํ•ด์ค€๋‹ค.
  • ๋ฌผ๊ณ ๊ธฐ ๋จน์„ ๊ฒƒ์ด ์—†์„ ๋•Œ๊นŒ์ง€ ์‹คํ–‰ํ•˜๊ณ  ๊ฒฐ๊ณผ๋ฅผ ์ถœ๋ ฅํ•ด ์ค€๋‹ค.


์‹œ๋ฎฌ๋ ˆ์ด์…˜ ๋ฌธ์ œ์ธ๋ฐ ๋‚ด์šฉ์€ ๊ทธ๋ ‡๊ฒŒ ์–ด๋ ต์ง€ ์•Š์œผ๋‚˜ ์กฐ๊ฑด๋“ค์ด ๋งŽ์•„์„œ ์ข€ ๋จธ๋ฆฌ๊ฐ€ ์•„ํŒ ๋˜ ๋ฌธ์ œ์ด๋‹ค.
์ ‘๊ทผ์„ ์ œ๋Œ€๋กœ ํ•ด๋†“๊ณ  ๋‹ค ํ’€์ง€๋ชปํ•ด์„œ ์˜ค๋ž˜ ๋ถ™์žก๊ณ  ์žˆ์—ˆ๋Š”๋ฐ ๋„ˆ๋ฌด ์•„์‰ฌ์› ๋˜ ๋ฌธ์ œ..

ํƒœ๊ทธ: , , ,

์นดํ…Œ๊ณ ๋ฆฌ:

์—…๋ฐ์ดํŠธ: