๐ŸŒžAlgorithm/๐Ÿ”ฅBaekjoon

[Baekjoon] 6593_์ƒ๋ฒ” ๋นŒ๋”ฉ

๋ฟŒ์•ผ._. 2023. 1. 8. 00:05

Gold V

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

< ์ƒ๋ฒ” ๋นŒ๋”ฉ >

 

๋ฌธ์ œ ํ’€์ด

 

3์ฐจ์›์œผ๋กœ ์ž…๋ ฅ๋ฐ›์€ ํ›„ ์ƒ, ํ•˜, ์ขŒ, ์šฐ, ์œ„, ์•„๋ž˜๋ฅผ ํƒ์ƒ‰ํ•˜๋ฉฐ ๋น„์–ด์žˆ๋Š” ์นธ์œผ๋กœ ์ด๋™ํ•˜๋ฉฐ 

์ถœ๊ตฌ๋ฅผ ๋งŒ๋‚  ๊ฒฝ์šฐ ์ข…๋ฃŒํ•ด ์ฃผ์—ˆ๋‹ค.

 

 

 - my solution (Java)

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 _6593_ {
	static int[] dx = { -1, 1, 0, 0 };
	static int[] dy = { 0, 0, -1, 1 };
	static Queue<int[]> queue;
	static char[][][] map;
	static int visited[][][], L, R, C, result;

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

		queue = new LinkedList<>();

		while (true) {
			st = new StringTokenizer(bf.readLine());
			L = Integer.parseInt(st.nextToken());
			R = Integer.parseInt(st.nextToken());
			C = Integer.parseInt(st.nextToken());
			if (L == 0)
				break;
			result = 0;
			map = new char[L][R][C];
			visited = new int[L][R][C];
			for (int i = 0; i < L; i++) {
				for (int j = 0; j < R; j++) {
					st = new StringTokenizer(bf.readLine());
					String line = st.nextToken();
					for (int k = 0; k < C; k++) {
						map[i][j][k] = line.charAt(k);
						if (map[i][j][k] == 'S')
							queue.add(new int[] { i, j, k });
					}
				}
				new StringTokenizer(bf.readLine());
			}
			search();
			queue.clear();
			if(result>0) System.out.println("Escaped in "+result+" minute(s).");
			else System.out.println("Trapped!");
		}
	}

	private static void search() {
		while (!queue.isEmpty()) {
			int[] temp = queue.poll();
			if (temp[0] - 1 >= 0) {
				if (map[temp[0] - 1][temp[1]][temp[2]] == 'E') {
					result = visited[temp[0]][temp[1]][temp[2]] + 1;
					break;
				} else if (map[temp[0] - 1][temp[1]][temp[2]] == '.' && visited[temp[0] - 1][temp[1]][temp[2]] == 0) {
					visited[temp[0] - 1][temp[1]][temp[2]] = visited[temp[0]][temp[1]][temp[2]] + 1;
					queue.add(new int[] { temp[0] - 1, temp[1], temp[2] });
				}
			}
			if (temp[0] + 1 < L) {
				if(map[temp[0]+1][temp[1]][temp[2]]=='E') {
					result = visited[temp[0]][temp[1]][temp[2]] + 1;
					break;
				}
				if (map[temp[0] + 1][temp[1]][temp[2]] == '.' && visited[temp[0] + 1][temp[1]][temp[2]] == 0) {
					visited[temp[0] + 1][temp[1]][temp[2]] = visited[temp[0]][temp[1]][temp[2]] + 1;
					queue.add(new int[] { temp[0] + 1, temp[1], temp[2] });
				}
			}
			for (int i = 0; i < 4; i++) {
				int x = temp[1] + dx[i];
				int y = temp[2] + dy[i];
				if (x >= 0 && x < R && y >= 0 && y < C) {
					if(map[temp[0]][x][y]=='E') {
						result = visited[temp[0]][temp[1]][temp[2]] + 1;
						break;
					}
					if (map[temp[0]][x][y] == '.' && visited[temp[0]][x][y] == 0) {
						visited[temp[0]][x][y] = visited[temp[0]][temp[1]][temp[2]] + 1;
						queue.add(new int[] { temp[0], x, y });
					}
				}
			}
			if(result>0)break;
		}
	}
}

 

Main

- L, R, C ์ž…๋ ฅ

- ์ž…๋ ฅ์˜ ๋์ด L, R, C๊ฐ€ ๋ชจ๋‘ 0์œผ๋กœ ํ‘œํ˜„๋˜๋ฏ€๋กœ L์ด 0์ธ ๊ฒฝ์šฐ ์ข…๋ฃŒ

- result, map, visited๋ฅผ ์ดˆ๊ธฐํ™”

- map ์ž…๋ ฅ๋ฐ›์œผ๋ฉฐ ์‹œ์ž‘ ์ง€์ ์€ 'S'๋ฅผ ์ž…๋ ฅ๋ฐ›์œผ๋ฉด queue์— ๋„ฃ์–ด์คŒ

- search ํ•จ์ˆ˜ ํ˜ธ์ถœ

- ๋‹ค์Œ ์—ฐ์‚ฐ์„ ์œ„ํ•ด queue ์ดˆ๊ธฐํ™”ํ•ด ์คŒ

- ๋‹ต ์ถœ๋ ฅ

 

search()

- queue์—์„œ ํ•˜๋‚˜ ๋ฝ‘์Œ

- ์ƒ์œผ๋กœ ์ด๋™ํ•˜์—ฌ ๋นŒ๋”ฉ ๋ฒ”์œ„ ์•ˆ์ด๋ฉฐ ๋น„์–ด์žˆ๋Š” ์นธ์ด๊ณ  ์•„์ง ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์€ ๊ณณ์ด๋ฉด ์ด๋™

- ํ•˜๋กœ ์ด๋™ํ•˜์—ฌ ๋นŒ๋”ฉ ๋ฒ”์œ„ ์•ˆ์ด๋ฉฐ ๋น„์–ด์žˆ๋Š” ์นธ์ด๊ณ  ์•„์ง ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์€ ๊ณณ์ด๋ฉด ์ด๋™

- ๋™, ์„œ, ๋‚จ, ๋ถ์œผ๋กœ ์ด๋™ํ•˜์—ฌ ๋นŒ๋”ฉ ๋ฒ”์œ„ ์•ˆ์ด๋ฉฐ ๋น„์–ด์žˆ๋Š” ์นธ์ด๊ณ  ์•„์ง ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์€ ๊ณณ์ด๋ฉด ์ด๋™

- ๊ฐ ์ด๋™ํ•œ ๊ณณ์ด ๋นˆ ๊ณณ์ด ์•„๋‹ˆ๋ผ ์ถœ๊ตฌ์ธ 'E'์ด๋ผ๋ฉด ์ข…๋ฃŒ

 


์ƒ๊ฐ๐Ÿค”

 

3์ฐจ์›์ธ ๊ฒƒ๋งŒ ๊ณ ๋ คํ•œ๋‹ค๋ฉด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค.

 


'๐ŸŒžAlgorithm > ๐Ÿ”ฅBaekjoon' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[Baekjoon] 3187_์–‘์น˜๊ธฐ ๊ฟ  (0) 2023.02.22
[Baekjoon] 1240_๋…ธ๋“œ์‚ฌ์ด์˜ ๊ฑฐ๋ฆฌ  (0) 2023.01.15
[Baekjoon] 13565_์นจํˆฌ  (1) 2022.12.27
[Baekjoon] 16197_๋‘ ๋™์ „  (0) 2022.12.26
[Baekjoon] 9019_DSLR  (0) 2022.12.23