-
[백준]9019: DSLR - JAVA문제풀이/백준 2021. 3. 7. 19:53
문제
풀이
A를 B로 표현할 수 있는 최소한의 방법을 출력하는 것이므로 BFS를 사용하였다.
모든 경우에서 4가지 명령어를 실행하고 각각의 실행한 경우에서 또 명령어를 실행하도록 반복해 주었다. 이러다가 B가 되었을때 그때까지의 명령어를 반환하도록 하였다.
현재까지 사용된 명령어를 저장하기 위해서 Node 클래스를 사용해 주었다.
코드
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768import java.util.*;public class Main {static char[] command = {'D', 'S', 'L', 'R'};static boolean[] visited;public static void main(String[] args) {Scanner scan = new Scanner(System.in);int t = scan.nextInt();for(int i = 0; i < t; i++) {int start = scan.nextInt();int target = scan.nextInt();visited = new boolean[10000];System.out.println(bfs(start, target));}}public static String bfs(int start, int target) {Queue<Node> q = new LinkedList<>();q.offer(new Node(start, ""));visited[start] = true;while(!q.isEmpty()) {Node current = q.poll();if(current.register == target) return current.result;for(int i = 0; i < 4; i++) {int change = changeRegister(current.register, command[i]);if(visited[change] == false) {visited[change] = true;q.offer(new Node(change, current.result + command[i]));}}}return "";}public static int changeRegister(int register, char command) {if(command == 'D') {register *= 2;if(register > 9999) register %= 10000;} else if(command == 'S') {register -= 1;if(register == -1) register = 9999;} else if(command == 'L') {int temp1 = (register % 1000) * 10;int temp2 = register / 1000;register = temp1 + temp2;} else {int temp1 = register / 10;int temp2 = (register % 10) * 1000;register = temp1 + temp2;}return register;}public static class Node {int register;String result;public Node(int register, String result) {this.register = register;this.result = result;}}}cs '문제풀이 > 백준' 카테고리의 다른 글
[백준]1038: 감소하는 수 - JAVA (0) 2021.03.09 [백준]2023: 신기한 소수 - JAVA (0) 2021.03.08 [백준]13023: ABCDE - JAVA (0) 2021.03.04 [백준 ]5014: 스타트링크 - JAVA (0) 2021.03.03 [백준]1504: 특정한 최단 경로 - JAVA (0) 2021.03.02