OJ
[BOJ] 9019 DSLR (JAVA)
P3PP4
2023. 7. 16. 10:00
https://www.acmicpc.net/problem/9019
9019번: DSLR
네 개의 명령어 D, S, L, R 을 이용하는 간단한 계산기가 있다. 이 계산기에는 레지스터가 하나 있는데, 이 레지스터에는 0 이상 10,000 미만의 십진수를 저장할 수 있다. 각 명령어는 이 레지스터에
www.acmicpc.net
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.LinkedList;
import java.util.Queue;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
int T = Integer.parseInt(br.readLine());
for (int tc = 0; tc < T; tc++) {
StringTokenizer st = new StringTokenizer(br.readLine(), " ");
int start = Integer.parseInt(st.nextToken());
int end = Integer.parseInt(st.nextToken());
boolean[] visited = new boolean[10000];
Queue<Info> q = new LinkedList<>();
visited[start] = true;
q.offer(new Info(start, ""));
while (!q.isEmpty()) {
Info i = q.poll();
if (i.num == end) {
sb.append(i.s).append("\n");
break;
}
int next = left(i.num);
if (!visited[next]) {
q.offer(new Info(next, i.s + "L"));
visited[next] = true;
}
next = right(i.num);
if (!visited[next]) {
q.offer(new Info(next, i.s + "R"));
visited[next] = true;
}
next = mul(i.num);
if (!visited[next]) {
q.offer(new Info(next, i.s + "D"));
visited[next] = true;
}
next = minus(i.num);
if (!visited[next]) {
q.offer(new Info(next, i.s + "S"));
visited[next] = true;
}
}
}
System.out.print(sb);
}
static int left(int num) {
int next = num * 10;
return next / 10000 + next % 10000;
}
static int right(int num) {
return (num % 10) * 1000 + num / 10;
}
static int mul (int num) {
return (num * 2) % 10000;
}
static int minus (int num) {
return num == 0 ? 9999 : num - 1;
}
static class Info {
int num;
String s;
Info (int num, String s) {
this.num = num;
this.s = s;
}
}
}