개발 공부 기록

[Baekjoon 9019번/JAVA] DSLR 본문

PS/DFS&BFS

[Baekjoon 9019번/JAVA] DSLR

나만없서고냥이 2023. 11. 8. 17:36

Question

https://www.acmicpc.net/problem/9019

 

9019번: DSLR

네 개의 명령어 D, S, L, R 을 이용하는 간단한 계산기가 있다. 이 계산기에는 레지스터가 하나 있는데, 이 레지스터에는 0 이상 10,000 미만의 십진수를 저장할 수 있다. 각 명령어는 이 레지스터에

www.acmicpc.net

 


💡 Solution

아래는 BFS를 이용한 방식으로, 먼저 큐에 A를 넣습니다.

이후 A에서 DSLR 연산을 거친 새로운 수를 큐에 넣고, 다시 해당 수에서 DSLR 연산을 거쳐가는 방식입니다.

이 과정을 숫자 B에 들릴 때까지(visites[B] == true) 수행합니다. 

 

💻 Code

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.LinkedList;
import java.util.Queue;
import java.util.StringTokenizer;

public class BJ9019 {
	static int A, B;

	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		
		int T = Integer.parseInt(br.readLine());
		StringTokenizer st;
		for (int tc = 0; tc < T; tc++) {
			st = new StringTokenizer(br.readLine(), " ");
			A = Integer.parseInt(st.nextToken());
			B = Integer.parseInt(st.nextToken());
			
			Queue<Integer> queue = new LinkedList<>();
			String[] answer = new String[10000];
			boolean[] visited = new boolean[10000];
			
			queue.add(A);
			visited[A] = true;
			Arrays.fill(answer, "");  // answer 배열 초기화
			
			while (!queue.isEmpty() && !visited[B]) {
				int now = queue.poll();
				
				int D = (now * 2) % 10000;
				int S = now == 0 ? 9999 : now - 1;
				int L = (now % 1000) * 10 + (now / 1000);
				int R = (now % 10)* 1000 + (now / 10);
				
				if (!visited[D]) {
					queue.add(D);
					visited[D] = true;
					answer[D] = answer[now] + "D";
				}
				
				if (!visited[S]) {
					queue.add(S);
					visited[S] = true;
					answer[S] = answer[now] + "S";
				}
				
				if (!visited[L]) {
					queue.add(L);
					visited[L] = true;
					answer[L] = answer[now] + "L";
				}
				
				if (!visited[R]) {
					queue.add(R);
					visited[R] = true;
					answer[R] = answer[now] + "R";
				}
			}
			System.out.println(answer[B]);
		}
	}

}

'PS > DFS&BFS' 카테고리의 다른 글

[BaekJoon 1012번 / JAVA] 유기농 배추  (0) 2023.11.17
[BaekJoon 5014번 / JAVA] 스타트링크  (0) 2023.11.17