Tags
- BOJ
- ์ํ
- ๊ตฌํ
- queue
- ์ ๋ ฌ
- PGM
- ์ ์๋ก
- ์๋ฃ๊ตฌ์กฐ
- Python
- Study
- BFS
- ๋๋น ์ฐ์ ํ์
- ๊ทธ๋ํ ํ์
- ๋ฐฑํธ๋ํน
- sort
- ๊น์ด ์ฐ์ ํ์
- ๊ทธ๋ํ ์ด๋ก
- ์๋ฎฌ๋ ์ด์
- DP
- ๋ฌธ์์ด
- Brute Force Algorithm
- ๊ต์ฌ
- CodingTest
- Dynamic Programming
- greedy
- Java
- LV2
- dfs
- SpringBoot
- stack
Archives
๊ธฐ๋ก๋ฐฉ
BOJ_1697 : ์จ๋ฐ๊ผญ์ง ๋ณธ๋ฌธ
๐ธ ๋ฌธ์ ๋ถ์ ๐ธ
- 0๋ถํฐ 10๋ง๊น์ง ๋ฒ์์์, ์๋น์ด์ ์์น N ๋ถํฐ ๋์์ ์์น K๋ก ์ด๋ํ๋ ์ต๋จ ์๊ฐ์ ์ถ๋ ฅํ๋ค.
- ์๋น์ด๊ฐ ์ด๋ํ๋ ๋ฐฉ๋ฒ์ ์ข์ฐ ํ์นธ(-1, +1), ์๊ฐ์ด๋ (ํ์์น *2)๊ฐ ์๋ค.
- ์ฃผ์ ํ ์ ์ ์ด๋์์น์ k์ ๊ฑฐ๋ฆฌ ์ฐจ์ด๊ฐ ๊ฐ์ฅ ์ ์ ๊ฒ์ ์ ํํ๋ ๊ทธ๋ฆฌ๋ ๋ฐฉ์์ผ๋ก ๊ณ์ฐํด์๋ ์๋๋ค.
- ๊ทธ๋ฆฌ๋๋ก ๋ณด๋ฉด ์์ 1๋ฒ์์ 5 - 10 - 9 - 18 - 17 ์์ 2๋ฒ์งธ ์ด๋ ํ ๋์ธ 10์์น์์ ์๊ฐ์ด๋์ด ์ ๋๊ฐ ์ฐจ์ด๊ฐ 3์ผ๋ก ๊ฐ์ฅ ์ ์๋ฐ, ์ ์ ์ต๋จ ๊ฑฐ๋ฆฌ๋ ์ผ์ชฝ ์ด๋(-1) ํ ์๊ฐ์ด๋์ด ๋ ๋น ๋ฅด๋ค.
- ๋ฐ๋ผ์ ๋ชจ๋ ๊ฒฝ๋ก๋ฅผ ๋ณด๋ฉด์ ๊ทธ ์ค ์ต๋จ ๊ฒฝ๋ก๋ฅผ ๊ตฌํด์ผ ํ๋ฏ๋ก BFS๋ฅผ ์ฌ์ฉํด์ผ ํ๋ค.
๐ธ ์ฝ๋ ๐ธ
import java.util.ArrayDeque;
import java.util.Queue;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int k = sc.nextInt();
boolean[] visit = new boolean[100_001];
Queue<Subin> que = new ArrayDeque<>();
Subin subin = new Subin(n, 0);
que.add(subin);
while (!que.isEmpty()) {
if ((subin = que.poll()).x == k) {
break;
}
visit[subin.x] = true;
if (subin.x - 1 >= 0 && !visit[subin.x - 1]) {
que.add(new Subin(subin.x - 1, subin.ct + 1));
}
if (subin.x + 1 <= 100_000 && !visit[subin.x + 1]) {
que.add(new Subin(subin.x + 1, subin.ct + 1));
}
if (subin.x * 2 <= 100_000 && !visit[subin.x * 2]) {
que.add(new Subin(subin.x * 2, subin.ct + 1));
}
}
System.out.println(subin.ct);
}
private static class Subin {
int x, ct;
Subin(int x, int ct) {
this.x = x;
this.ct = ct;
}
}
}
๐ธ ์ฝ๋ ํด์ ๐ธ
- ์๋น์ด์ ํ์ฌ ์์น์ ์นด์ดํธ๋ฅผ ์ ์ฅํ ์ ์๋๋ก Subin ํด๋์ค๋ฅผ ๋ง๋ค์๋ค.
- ์ฌ๋ฌ๋ฒ ๊ณ์ฐํ์ง ์๋๋ก boolean ๋ฐฐ์ด visit์ ๋ง๋ค๊ณ , N์์น๋ถํฐ BFS๋ฅผ ๋๋ฆฐ๋ค.
- n == k ๊ฐ ๋๋ฉด ๋ฐ๋ณต์ ์ข ๋ฃํ๊ณ ํ์ฌ ์นด์ดํธ๋ฅผ ์ถ๋ ฅํ๋ค.
๐ธ ์กฐ๊ธ ๋ค๋ฅธ ํ์ด ๐ธ
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 final int MAX = 100_000;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int N = Integer.parseInt(st.nextToken());
int K = Integer.parseInt(st.nextToken());
System.out.println(bfs(N, K));
}
private static int bfs(int n, int k){
boolean[] visit = new boolean[MAX + 1];
Queue<Subin> que = new ArrayDeque<>();
que.offer(new Subin(n, 0));
visit[n] = true;
while (!que.isEmpty()) {
Subin subin = que.poll();
int index = subin.index-1;
int time = subin.time+1;
// ์ผ์ชฝ
if (0<= index && index <= MAX && !visit[index]){
if (index == k) return time;
que.offer(new Subin(index, time));
visit[index] = true;
}
// ์ค๋ฅธ์ชฝ
index = subin.index+1;
if (0<= index && index <= MAX && !visit[index]){
if (index == k) return time;
que.offer(new Subin(index, time));
visit[index] = true;
}
// ์๊ฐ์ด๋
index = subin.index*2;
if (0<= index && index <= MAX && !visit[index]){
if (index == k) return time;
que.offer(new Subin(index, time));
visit[index] = true;
}
}
return -1;
}
private static class Subin {
int index, time;
public Subin(int index, int time) {
this.index = index;
this.time = time;
}
}
}
- ํ์ ๋ฃ๊ธฐ ์ ์ ์ ๋ต์ธ์ง ํ์ธํ๋ ๋ฐฉ์์ด๋ค.
- ์ฃผ์ ํ ์ ์ n == k ์ํ๋ก ์๊ฐ์ด 0์ด์ธ ๊ฒฝ์ฐ์ด๋ค.
- while๋ฌธ ์์์๋ ๋ณํ ๊ฐ์ ๋น๊ตํ๋ฏ๋ก, ํ์ ๋ฃ๊ธฐ ์ n๊ณผ k๋ฅผ ํ์ธํด์ผ ํ๋ค.
๐ธ end ๐ธ
- ์ฒ์ ๋ฌธ์ ๋ฅผ ๋ณด์๋ง์ ๊ทธ๋ฆฌ๋๋ผ๊ณ ์๊ฐํ๊ณ , while๋ฌธ ์์์ ์ ๋๊ฐ์ ๋น๊ตํ๋ ๋ฐฉ์์ผ๋ก ๊ตฌํํ๋๋ฐ ์์ 1๋ฒ์์ ํ๋ ธ๋ค๋ ๊ฒ์ ์์์ฑ๋ค.
- ์์ง ๊ทธ๋ฆฌ๋ ๋ถ๋ถ์ด ๋ง์ด ๋ถ์กฑํ ๊ฒ ๊ฐ๋ค.
- ๋ฌธ์ ๋ถ์๊ณผ ์ฝ๋ฉ ๊ณํ์ ์ ์ด๊ฐ๋ฉฐ ๋ฌธ์ ๋ฅผ ํ์๋ค.
- ๊ทธ๋ฆฌ๋๊ฐ ํ๋ ธ๋ค๊ณ ํ์ ํ ํ๋ก ๋ธ๋ฃจํธ ํฌ์ค์ BFS๋ฅผ ์๊ฐํ๋ค.
- ๋ฐ๋ก ๋ค์ ์ฝ๋ฉ ๊ณํ์ ์ ์ง ์์๋ค.
- 2ํ์ฐจ๋ก ๋ค์ ํ์ด์, ํ์ ๋ฃ๊ธฐ ์ ์ ์ ๋ต์ ํ์ธํ๋ ๋ฐฉ์์ผ๋ก ํ์ดํ๋ค.
- ์ ๋ต์ด 0์ด ์ผ๋๋ฅผ ์ฒ๋ฆฌํ์ง ์์์ 1ํ ํ๋ ธ๋ค.
728x90
'CodingTest > Java' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
BOJ_14888 : ์ฐ์ฐ์ ๋ผ์๋ฃ๊ธฐ (0) | 2023.02.20 |
---|---|
BOJ_19621 : ํ์์ค ๋ฐฐ์ 2 (0) | 2023.02.20 |
BOJ_1954 : ํํ์คํ (0) | 2023.02.10 |
BOJ_1992 : ์ฟผ๋ํธ๋ฆฌ (0) | 2023.02.10 |
BOJ_2312 : ์ ๋ณต์ํ๊ธฐ (0) | 2023.02.10 |