[Baekjoon] 15426_GlitchBot
๋ฌธ์ (์ถ์ฒ: 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 ํจ์๋ฅผ ํธ์ถํ๋ค.
