Tags
- ์ํ
- ๋๋น ์ฐ์ ํ์
- queue
- ์ ๋ ฌ
- ์๋ฃ๊ตฌ์กฐ
- ๊ทธ๋ํ ์ด๋ก
- SpringBoot
- greedy
- ๊ตฌํ
- CodingTest
- ์ ์๋ก
- ์๋ฎฌ๋ ์ด์
- sort
- PGM
- ๋ฐฑํธ๋ํน
- ๊ทธ๋ํ ํ์
- ๊ต์ฌ
- DP
- Brute Force Algorithm
- ๊น์ด ์ฐ์ ํ์
- stack
- dfs
- Java
- Study
- BOJ
- BFS
- Dynamic Programming
- Python
- LV2
- ๋ฌธ์์ด
Archives
๊ธฐ๋ก๋ฐฉ
BOJ_9019 : DSLR ๋ณธ๋ฌธ
๐ธ ๋ฌธ์ ๋ถ์ ๐ธ
- T๋ฒ์ ํ
์คํธ ์ผ์ด์ค๋ฅผ ๋๋ฆฐ๋ค.
- ๊ณ์ฐ๊ธฐ๋ 10์ง์ 4์๋ฆฌ ์ซ์๋ก 0000~9999๊น์ง ์ฒ๋ฆฌํ ์ ์๋ค.
- 4๊ฐ์ง ์ฐ์ฐ D, S, L, R์ด ์๋ค.
- A๋ถํฐ ์์ํด B๊ฐ ๋๋ ์ต์๊ธธ์ด ๋ช ๋ น์ด๋ฅผ ์ถ๋ ฅํ๋ค.
- ๊ฐ์ค์น๊ฐ ์๋ ์ต๋จ๊ฑฐ๋ฆฌ(์ต์๊ฒฝ๋ก) ๋ฌธ์ ์ด๋ฏ๋ก BFS ๋ฅผ ์ฌ์ฉํ๋ค.
- ํ์์ ํ์ฌ ์ซ์์ ์ง๊ธ๊น์ง์ ์ฐ์ฐ์ ๊ธฐ๋กํ ํด๋์ค๋ฅผ ๋ง๋ ๋ค.
- D : 2n%10000
- S : n-1 (n=1์ด๋ฉด, 9999)
- L : (LShift) n = n*10%10000 + n/1000
- R : (RShift) n = n/10 + n%10*1000
๐ธ ์ฝ๋ ๐ธ
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayDeque;
import java.util.Queue;
import java.util.StringTokenizer;
public class Main {
private static class DSLR {
String history;
int num;
public DSLR(int num, String history) {
this.num = num;
this.history = history;
}
}
private static final int MAX = 10_000;
public static void main(String[] args) throws IOException {
// Input
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int T = Integer.parseInt(br.readLine());
StringBuilder sb = new StringBuilder();
StringTokenizer st = null;
for (int t = 0; t < T; t++) {
st = new StringTokenizer(br.readLine());
int A = Integer.parseInt(st.nextToken());
int B = Integer.parseInt(st.nextToken());
boolean[] visited = new boolean[MAX];
// BFS
Queue<DSLR> que = new ArrayDeque<>();
que.offer(new DSLR(A, ""));
while (!que.isEmpty()) {
DSLR dslr = que.poll();
int num = dslr.num;
String history = dslr.history;
// B๋ฐ๊ฒฌํ๋ฉด ์ข
๋ฃ
if (num == B) {
sb.append(history).append('\n');
break;
}
if (!visited[num]) {
visited[num] = true;
// D ์ฐ์ฐ
int temp = (num * 2) % MAX;
if (!visited[temp]) {
que.offer(new DSLR(temp, history + 'D'));
}
// S ์ฐ์ฐ
temp = num == 0 ? 9999 : num - 1;
if (!visited[temp]) {
que.offer(new DSLR(temp, history + 'S'));
}
// L ์ฐ์ฐ
temp = (num * 10) % 10000 + num / 1000;
if (!visited[temp]) {
que.offer(new DSLR(temp, history + 'L'));
}
// R ์ฐ์ฐ
temp = num / 10 + num % 10 * 1000;
if (!visited[temp]) {
que.offer(new DSLR(temp, history + 'R'));
}
}
}
}
// Output
System.out.println(sb);
}
}
๐ธ ์ฝ๋ ํด์ ๐ธ
- ์ค๋ณต ์ฐ์ฐ์ ๋ฐฉ์งํ๊ธฐ ์ํด ๋ฐฉ๋ฌธ์ฒดํฌ ์ฉ boolean ๋ฐฐ์ด visited๋ฅผ ์ฌ์ฉํ๋ค.
- DSLR ํด๋์ค๋ ํ์ฌ ์ซ์ num๊ณผ ์ง๊ธ ๊น์ง์ ์ฐ์ฐ ๊ธฐ๋ก์ธ history๋ฅผ ๊ฐ๊ณ ์๋ค.
- ํ์์ pollํ ๋ค B์ด๋ฉด history๋ฅผ ์ถ๋ ฅํ๊ณ while๋ฌธ์ ์ข ๋ฃํ๋ค.
- B๊ฐ ์๋๊ณ , ๋ฐฉ๋ฌธํ์ง ์์ ์ซ์๋ผ๋ฉด 4๊ฐ์ง ์ฐ์ฐ์ ์ํํด ํ์ ๋ด๋๋ค.
๐ธ end ๐ธ
- sift๋ฅผ ํ๋ก ๊ตฌํํด์ผ ํ๋ค๊ณ ์๋ชป ์๊ฐํด์ DSLRํด๋์ค์ num์ deque๋ก ๊ตฌํํ๋๋ ์๊ฐ์ด๊ณผ๊ฐ ๋ฌ๋ค.
- visited๋ฅผ true๋ก ๋ฐ๊พธ๋ ์ง์ ์ que.addํ๋ ๊ณณ์ผ๋ก ์๋ชป ์๊ฐํ๋ค๊ฐ, que.poll์ผ๋ก ์ด๋์์ผฐ๋ค.
- ๋ฌธ์ ์ ๋ถ์๊ณผ ํ์ด ๊ณํ์ ์ ์ด๊ฐ๋ฉฐ ํ์ดํ๋ค.
728x90
'CodingTest > Java' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
BOJ_7662 : ์ด์ค ์ฐ์ ์์ ํ (0) | 2023.03.29 |
---|---|
BOJ_5430 : AC (0) | 2023.03.28 |
BOJ_14502 : ์ฐ๊ตฌ์ (0) | 2023.03.08 |
BOJ_1916 : ์ต์๋น์ฉ ๊ตฌํ๊ธฐ (0) | 2023.03.08 |
BOJ_1717 : ์งํฉ์ ํํ (0) | 2023.03.08 |