-
[BOJ] DSLRAlgorithm/BOJ 2020. 2. 7. 17:41
[9019] DSLR
https://www.acmicpc.net/problem/9019
- 네 자리 숫자 A와 B가 주어졌을 때
- A -> B로 바꾸는 최소 연산 횟수
- D : N -> 2*N
- S : N -> N-1
- L : 한 자리씩 왼쪽으로
- R : 한 자리씩 오른쪽으로
Solution
- BFS 풀이방법
- 이 문제는 어떠한 과정을 거쳐야 하는지를 구해야 한다.
- Register 객체를 만들어 연산을 했을 때 어떤 과정을 거쳤는지 저장한다.
- 123에 L 연산을 수행했을 때는 231이 아닌 1230이 계산 결과가 된다.
소스코드
import java.util.LinkedList; import java.util.Queue; import java.util.Scanner; public class Main { public static final int MAX = 10000; int a, b; Register[] arr; boolean c[]; class Register { int num; int cnt; String op; public Register(int num) { this.num = num; cnt = 0; op = ""; } } public void go() { Scanner sc = new Scanner(System.in); int tc = sc.nextInt(); while (tc-- > 0) { a = sc.nextInt(); b = sc.nextInt(); arr = new Register[MAX]; c = new boolean[MAX]; arr[a] = new Register(a); bfs(arr[a]); System.out.println(arr[b].op); } } public void bfs(Register n) { Queue<Register> q = new LinkedList<>(); q.offer(n); c[n.num] = true; while (!q.isEmpty()) { Register cur = q.poll(); int next = (cur.num * 2) % MAX; if (!c[next]) { arr[next] = new Register(next); arr[next].cnt = cur.cnt + 1; arr[next].op = cur.op.concat("D"); q.offer(arr[next]); c[next] = true; } next = cur.num - 1; if (next == -1) { next = 9999; } if (!c[next]) { arr[next] = new Register(next); arr[next].cnt = cur.cnt + 1; arr[next].op = cur.op.concat("S"); q.offer(arr[next]); c[next] = true; } next = (cur.num % 1000) * 10 + (cur.num / 1000); if (!c[next]) { arr[next] = new Register(next); arr[next].cnt = cur.cnt + 1; arr[next].op = cur.op.concat("L"); q.offer(arr[next]); c[next] = true; } next = (cur.num % 10) * 1000 + (cur.num / 10); if (!c[next]) { arr[next] = new Register(next); arr[next].cnt = cur.cnt + 1; arr[next].op = cur.op.concat("R"); q.offer(arr[next]); c[next] = true; } } } public static void main(String[] args) { Main main = new Main(); main.go(); } }
'Algorithm > BOJ' 카테고리의 다른 글
[BOJ] 치킨 배달 (0) 2020.02.08 [BOJ] 배열 돌리기 4 (0) 2020.02.08 [BOJ] 숨바꼭질 2 (0) 2020.02.07 [BOJ] 숨바꼭질 4 (0) 2020.02.06 [BOJ] 숨바꼭질 3 (0) 2020.02.05