๐ŸŒžAlgorithm/๐Ÿ”ฅBaekjoon

[Baekjoon] 15426_GlitchBot

๋ฟŒ์•ผ._. 2025. 7. 23. 13:26
๋ฌธ์ œ(์ถœ์ฒ˜: https://www.acmicpc.net/problem/15426)

< GlitchBot >

 

๋ฌธ์ œ ํ’€์ด 

 

๋ชจ๋“  ๋ช…๋ น์–ด๋ฅผ ์ˆ˜์ •ํ•ด ๋ณด๋ฉด์„œ ๋ชฉํ‘œ ๋ชฉ์ ์ง€์— ๋„๋‹ฌํ•  ๋•Œ๋ฅผ ๊ตฌํ•œ๋‹ค.

 

my solution (Java)

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

public class _15426_ { // GlitchBot
	static int dx[] = { 1, 0, -1, 0 };
	static int dy[] = { 0, 1, 0, -1 };
	static int x, y;
	static boolean flag;

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

		y = Integer.parseInt(st.nextToken());
		x = Integer.parseInt(st.nextToken());

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

		String arr[] = new String[n];
		for (int i = 0; i < n; i++) {
			arr[i] = bf.readLine();
		}

		flag = false;
		for (int i = 0; i < n; i++) {
			search(arr, i, 0, 0, 0, 0, "");
		}
	}

	private static void search(String[] arr, int i, int a, int b, int dir, int idx, String cmd) {
		if (flag) {
			return;
		}
		if (idx == arr.length) {
			if (a == x && y == b) {
				flag = true;
				System.out.println((i + 1) + " " + cmd);
			}
			return;
		}
		if (i == idx) {
			if (arr[i].equals("Left")) {
				search(arr, i, a, b, (dir + 1) > 3 ? 0 : dir + 1, idx + 1, "Right"); // right
				search(arr, i, a + dx[dir], b + dy[dir], dir, idx + 1, "Forward"); // forward
			} else if (arr[i].equals("Right")) {
				search(arr, i, a, b, (dir - 1) < 0 ? 3 : dir - 1, idx + 1, "Left"); // left
				search(arr, i, a + dx[dir], b + dy[dir], dir, idx + 1, "Forward"); // forward
			} else {
				search(arr, i, a, b, (dir + 1) > 3 ? 0 : dir + 1, idx + 1, "Right"); // right
				search(arr, i, a, b, (dir - 1) < 0 ? 3 : dir - 1, idx + 1, "Left"); // left
			}
		} else {
			if (arr[idx].equals("Left")) {
				search(arr, i, a, b, (dir - 1) < 0 ? 3 : dir - 1, idx + 1, cmd); // left
			} else if (arr[idx].equals("Right")) {
				search(arr, i, a, b, (dir + 1) > 3 ? 0 : dir + 1, idx + 1, cmd); // right
			} else {
				search(arr, i, a + dx[dir], b + dy[dir], dir, idx + 1, cmd); // forward
			}
		}
	}
}
๋ณ€์ˆ˜)
dx, dy : ์ƒ, ์šฐ, ํ•˜, ์ขŒ
x, y : ๋ชฉ์ ์ง€
flag : ๋ชฉ์ ์ง€ ๋„๋‹ฌ ์—ฌ๋ถ€
n : ๋ช…๋ น์–ด ์ˆ˜
arr : ๋ช…๋ น์–ด

 

๋ชฉ์ ์ง€์™€ ๋ช…๋ น์–ด ์ˆ˜, ๋ช…๋ น์–ด๋ฅผ ์ž…๋ ฅ๋ฐ›๋Š”๋‹ค. ๋ช…๋ น์–ด๋ฅผ ํƒ์ƒ‰ํ•˜๋ฉฐ search ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค.

 

search(๋ช…๋ น์–ด ๋ฐฐ์—ด, ์ˆ˜์ • ๋ฒˆํ˜ธ, ํ˜„์žฌ ์œ„์น˜, ๋ฐฉํ–ฅ, ํ˜„์žฌ ๋ช…๋ น์–ด ๋ฒˆํ˜ธ, ์ˆ˜์ • ์‚ฌํ•ญ)

1) ์ˆ˜์ •์„ ํ†ตํ•ด ๋ชฉ์ ์ง€์— ๋„๋‹ฌํ–ˆ๋‹ค๋ฉด ์ข…๋ฃŒํ•œ๋‹ค. 

2) ๋ชจ๋“  ๋ช…๋ น์–ด๋ฅผ ์ˆ˜ํ–‰ํ–ˆ๋‹ค๋ฉด ๋ชฉ์ ์ง€์— ๋„๋‹ฌํ–ˆ๋Š”์ง€ ํ™•์ธ ํ›„ ์ข…๋ฃŒํ•œ๋‹ค. ๋ชฉ์ ์ง€์— ๋„๋‹ฌํ–ˆ๋‹ค๋ฉด ์ˆ˜์ •ํ•˜๋Š” ๋ฒˆํ˜ธ์™€ ์ˆ˜์ • ์‚ฌํ•ญ์„ ์ถœ๋ ฅํ•œ๋‹ค.

3) ์ˆ˜์ • ๋ฒˆํ˜ธ์™€ ํ˜„์žฌ ๋ช…๋ น์–ด ๋ฒˆํ˜ธ๊ฐ€ ์ผ์น˜ํ•˜๋‹ค๋ฉด ํ˜„์žฌ ๋ช…๋ น์–ด์™€ ๋‹ค๋ฅธ ๋ช…๋ น์–ด๋ฅผ ์ˆ˜ํ–‰ํ•˜๋ฉฐ search ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค.

4) ์ˆ˜์ • ๋ฒˆํ˜ธ์™€ ํ˜„์žฌ ๋ช…๋ น์–ด ๋ฒˆํ˜ธ๊ฐ€ ์ผ์น˜ํ•˜์ง€ ์•Š๋‹ค๋ฉด ํ˜„์žฌ ๋ช…๋ น์–ด๋ฅผ ์ˆ˜ํ–‰ํ•˜๋ฉฐ search ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค.