- Today
- Total
- tree
- CS
- λ€μ΅μ€νΈλΌ
- μμμ λ ¬
- μλ°
- νλ‘κ·Έλλ¨Έμ€
- PS
- spring
- μλ°μμ μ
- μ‘Έμ μν
- ꡬν
- BFS
- pytorch
- MST
- java
- λ°μ΄ν°λ² μ΄μ€
- λ¬Έλ²
- OOP
- dp
- μΈν΄
- λ°±μ€
- Graph
- 그리λ
- Algorithm
- μλ£κ΅¬μ‘°
- 벨λ§ν¬λ
- array
- λ°±μλ
- database
- leetcode
Partially Committed
[λ°±μ€ 9019] DSLR μλ°(BFS + κ²½λ‘ μΆμ ) λ³Έλ¬Έ
[λ°±μ€ 9019] DSLR μλ°(BFS + κ²½λ‘ μΆμ )
WonderJay 2023. 6. 3. 12:39μ΅κ·Ό νμλ λ¬Έμ μ€μ κ°μ₯ μ¬λ°μλ κ² κ°μμ μ€λλ§μ λ°±μ€ ν¬μ€ν π
λ¬Έμ λ₯Ό κ°λ¨νκ² μμ½νμλ©΄
μ΄κΈ°κ° A
λͺ©νκ° B κ° μ£Όμ΄μ§λ©΄
μλ 4κ°μ§ μ°μ°μ ν΅ν΄μ Bλ‘ λλ¬ν μ μλ κ²½λ‘λ₯Ό μΆλ ₯νλ κ²μ΄λ€.
D μ°μ°: D λ nμ λ λ°°λ‘ λ°κΎΌλ€. κ²°κ³Ό κ°μ΄ 9999 λ³΄λ€ ν° κ²½μ°μλ 10000 μΌλ‘ λλ λλ¨Έμ§λ₯Ό μ·¨νλ€. κ·Έ κ²°κ³Ό κ°(2n mod 10000)μ λ μ§μ€ν°μ μ μ₯νλ€.
S μ°μ°: S λ nμμ 1 μ λΊ κ²°κ³Ό n-1μ λ μ§μ€ν°μ μ μ₯νλ€. nμ΄ 0 μ΄λΌλ©΄ 9999 κ° λμ λ μ§μ€ν°μ μ μ₯λλ€.
L μ°μ°: L μ nμ κ° μλ¦Ώμλ₯Ό μΌνΈμΌλ‘ νμ μμΌ κ·Έ κ²°κ³Όλ₯Ό λ μ§μ€ν°μ μ μ₯νλ€. μ΄ μ°μ°μ΄ λλλ©΄ λ μ§μ€ν°μ μ μ₯λ λ€ μλ¦Ώμλ μΌνΈλΆν° d2, d3, d4, d1μ΄ λλ€.
R μ°μ°: R μ nμ κ° μλ¦Ώμλ₯Ό μ€λ₯ΈνΈμΌλ‘ νμ μμΌ κ·Έ κ²°κ³Όλ₯Ό λ μ§μ€ν°μ μ μ₯νλ€. μ΄ μ°μ°μ΄ λλλ©΄ λ μ§μ€ν°μ μ μ₯λ λ€ μλ¦Ώμλ μΌνΈλΆν° d4, d1, d2, d3μ΄ λλ€.
μλ₯Ό λ€μ΄,
A: 1234 μ΄κ³ B: 3412 μ΄λ©΄
LL νΉμ RR μ ν΅ν΄μ λͺ©νκ°μΌλ‘ λλ¬ν μ μκ³ , μ λ΅μ LL λλ RR μ΄λ€. μ΄λ μ΄λ€ μ°μ°μ λ¨Όμ μν(νμ)ν΄λ³Ό κ²μ΄λμ λ°λΌμ λ¬λΌμ§λ©°, λμ¬ μ μλ μ λ΅μ κ²½μ°μ μλ μ¬λ¬ κ°κ° λ μ μλ€. (λͺ¨λ μ λ΅μ)
μ΄λ»κ² ν μ μμκΉ?
μ§λ μ£Ό, μ΄μνκ³ μλ μκ³ λ¦¬μ¦ μ€ν°λμμ μ μ νλ λ¬Έμ μΈ
μ¨λ°κΌμ§ 4 λ₯Ό νμλ€λ©΄, νμ΄ λ°©ν₯μ μ½κ² μ μΆν μ μμ κ²μ΄λ€.
μ΄κΈ°κ° A λ Έλμμ
D, S, L, R μ λ°λ₯Έ 4 κ°μ μμ λ Έλκ° μκΈ°κ³
λ κ·Έ μμλ Έλμμλ 4 κ°μ μμλ Έλκ° μκΈ°κ³ ...
μ΄λ¬ν λΆκΈ°(Branch)λ₯Ό μννλ©° B κ°μ λλ¬νλμ§ νμΈνλ€.
B κ°μ λλ¬νλ€λ©΄,λ μ΄μμ λΆκΈ°λ₯Ό νμ§ μκ³ μ§κΈκΉμ§ λ΄λ €μ¨ κ²½λ‘λ₯Ό μΆλ ₯νλ©΄ λλ€.
μ, κ·Έλν νμ λ¬Έμ λ‘ μΉνλμλ€.
μ΄μ κ³ λ―Όν κ²μ DFS / BFS μ€ μ΄λ κ²μ΄ λ ν¨μ¨μ μΈμ§λ₯Ό λ°μ Έλ³΄μμΌ νλ€.
DFS λ‘ νμνλ κ²½μ°μλ ν¨μ¨μ μ΄μ§ μμ κ²μμ μ§κ΄μ μΌλ‘ μ μ μμ κ²μ΄λ€.
κΉκ² λκΉμ§ (μΈμ λλ μ§λ λͺ¨λ₯Ό) νκ³ λ€κΈ° 보λ€λ λκ² λκ² νμνλ©΄μ λͺ©ν μνλ‘ λλ¬νλ μ§ νλ¨νλ κ²μ΄ μ’λ€.
μλλ©΄?
μ°λ¦¬λ μ΅λ¨ κ²½λ‘λ₯Ό μΆλ ₯ν΄μΌ νκΈ° λλ¬Έμ΄λ€.
BFS λ λκ² λκ² νμνλ―λ‘, μ΅μ΄λ‘ λͺ©ν μνμ λλ¬νλ€λ©΄ κ·Έ λκ° λ°λ‘ μ΅λ¨ κ²½λ‘μΈ κ²μ΄λ€.
DFS μμλ μ΄λ₯Ό λ³λλ‘ κ΄λ¦¬ν΄μ£Όμ΄μΌ νλ―λ‘ κ΅μ₯ν λΉν¨μ¨μ μΌ κ²μμ μ μ μλ€.
μ, κ·ΈλΌ BFS λ‘ νμ΄νλ©΄ λλ€.
μ΄μ λ κ³ λ―Όμ΄λ€.
μ΄κΈ° μν(A) μ λνμ¬
D,S,L,R μ°μ°μ μνν μμ λ Έλλ₯Ό νμνλ©΄μ λͺ©ν μν(B) λ‘ λλ¬νλ νμμ μ½κ² ꡬνν μ μμ κ² κ°μλ°,
μ΄κΈ° μν(A) -> λͺ©ν μν(B) κΉμ§μ κ²½λ‘λ μ΄λ»κ² μ μ₯/μΆλ ₯ν μ μμκΉ?
λ°λ‘ λ Έλμ μ§κΈκΉμ§ κ±°μ³μ¨ λͺ λ Ήμ΄λ€μ κΈ°λ‘νλ κ²μ΄λ€.
μ¦,
μ΄κΈ° μνμ λ Έλλ (A, "") μ΄λΌλ©΄
D λ₯Ό μνν μμ λ Έλλ (doD(A), "D")
S λ₯Ό μνν μμ λ Έλλ (doS(A), "S")
L λ₯Ό μνν μμ λ Έλλ (doL(A), "L")
R λ₯Ό μνν μμ λ Έλλ (doR(A), "R")
μ΄λ°μμΌλ‘ λ Έλμ κ±°μ³μ¨ λͺ λ Ήμ΄λ₯Ό κΈ°λ‘νμ.
μ΄λ₯Ό μν΄μ Node ν΄λμ€μ String νλλ₯Ό λ§λ€μ΄μ£Όκ³ , νμ Insert ν λλ§λ€ append μ°μ°μ μννλ©΄ λ κ²μ΄λ€.
μλ°λ₯Ό μ¬μ©νλ€λ©΄,
String μ κ³μν΄μ append μ°μ°μ νλ€λ κ²μ κ°λ Ή μλμ κ°μ΄
str + "R" μ΄λ° μμΌλ‘ ν ν
λ°
String μ λΆλ³ κ°μ²΄μ΄λ―λ‘, λ΄λΆ ꡬ쑰μ λ°λ₯΄λ©΄ μλ‘μ΄ String κ°μ²΄λ₯Ό λ§λ€κ³ 볡μ¬νκ³ append νλ κ³Όμ μ κ±°μΉλ€.
μ¦, String μ μ΄μ©νλ κ²μ λ€μ λΉν¨μ¨μ μΈ μΈ‘λ©΄μ΄ μ‘΄μ¬νλ©°
StringBuilder μ μ¬μ©νλ κ²μ΄ μ‘°κΈ λ μ΅μ νν μ μλ λ°©λ²μΌ κ²μ΄λ€.
νμ§λ§ μ΄ λ¬Έμ λ String μ μ¬μ©ν΄λ μκ° μ΄κ³Όμ 걸리μ§λ μλλ€. π
λ§μ½ μκ°μ΄κ³Όκ° λ°μνλ€λ©΄, String μ λν update λ₯Ό StringBuilder μΌλ‘ λ°κΏ 보λ κ²μ΄ μ’μ κ² κ°λ€.
κ·ΈλΌμλ λΆκ΅¬νκ³ μ¬μ ν μκ° μ΄κ³Όκ° λ°μνλ€λ©΄ μλμ 체ν¬λ¦¬μ€νΈλ₯Ό νμΈν΄λ³΄μ.
1. κ° νμ μλ λ Έλλ₯Ό λ λ°©λ¬Ένλ €κ³ νμ§λ μμμ§? (μ¬μ΄ν΄ λ°μ μ£Όμ) βοΈ
2. D, S, L, R μ°μ°μ λΉν¨μ¨μ μΌλ‘ ꡬνν κ²μ μλμ§? D,S,L,R μ°μ°μ λͺ¨λ ν μ€λ‘ ꡬν κ°λ₯νλ€. L,R μμ for λ¬Έμ μ¬μ©νλ€λκ° νλ©΄ μκ° μ΄κ³Όκ° λ°μν μλ μκ² λ€. βοΈ
3. μ μΆλ ₯μ BufferedReader, BufferedWriter μ μ¬μ©νλμ§? (Scanner λ λ§μ΄ λ리λ€.) βοΈ
μλλ ꡬν μ½λμ΄λ€.
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
///System.setIn(new FileInputStream("src/input.txt"));
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringTokenizer stk;
int tc = Integer.parseInt(br.readLine());
while (tc-- > 0) {
stk = new StringTokenizer(br.readLine());
boolean[] visited = new boolean[20000];
int A = Integer.parseInt(stk.nextToken()); // λ μ§μ€ν°μ μ΄κΉκ°
int B = Integer.parseInt(stk.nextToken()); // λ μ§μ€ν°μ μ΅μ’
κ°
Queue<Node> q = new LinkedList<>();
q.add(new Node(A, ""));
boolean flag = false;
while (!q.isEmpty()) {
if (flag) break;
Node now = q.poll();
int t = now.num;
String str = now.instruction;
for (Node nn : new Node[]{new Node(doD(t), str + "D"), new Node(doS(t), str + "S"),
new Node(doL(t), str + "L"), new Node(doR(t), str + "R")}) {
if (visited[nn.num]) continue;
if (nn.num == B) {
bw.write(nn.instruction + "\n");
flag = true;
break;
}
q.add(nn);
visited[nn.num] = true;
}
}
}
bw.flush();
bw.close();
}
public static class Node {
int num;
String instruction;
public Node(int num, String instruction) {
this.num = num;
this.instruction = instruction;
}
}
public static int doD(int n) {
return (2 * n) % 10000;
}
public static int doS(int n) {
return n == 0 ? 9999 : n - 1;
}
public static int doL(int n) { // 1234 -> 2341
return (n % 1000) * 10 + (n / 1000);
}
public static int doR(int n) { // 1234 -> 4123
return n / 10 + (n % 10) * 1000;
}
}
2023. 06. 03.