[BFS] 8. ์ก์์ง ์ฐพ๊ธฐ
BFS ๋ฐฉ์์ ํตํด ์ก์์ง๋ฅผ ์ฐพ์๋ค.
DFS์๋ ๋ค๋ฅด๊ฒ ์ฌ๊ทํจ์๋ฅผ ์ด์ฉํ๊ธฐ ๋ณด๋ค๋ (๋ฌผ๋ก ์ด์ฉํ ์๋ ์๊ฒ ์ง๋ง) Queue๋ฅผ ์ฌ์ฉํ์ฌ ๋ฌธ์ ๋ฅผ ์ ๊ทผํ๋ค.
ch[] ๋ผ๋ ๋ฐฐ์ด์ ๋ง๋ค์ด์ ์ด๋ฏธ ๋ค๋ฆฐ ์๋ฆฌ๋ 1๋ฅผ ์ ๋ ฅํ์ฌ ํฅํ ๋ค์ ๊ทธ ์๋ฆฌ์ ์ค๊ฒ ๋๋ฉด ๋์ด์ ๊ณ์ฐํ์ง ์๊ณ ์ ์ธ์ํค๋ ๋ฐฉ์์ ์ฌ์ฉํ๋ค. ์ด๋ ๋ฐ๋ณตํด์ ์ผ์ด๋ ๊ณผ์ ์ ์ง์์ผ๋ก์จ ์๊ฐ๋ณต์ก๋๋ฅผ ์ค์ด๋ ํจ๊ณผ๋ฅผ ๊ฐ์ ธ์จ๋ค.
-๋์ ํ์ด-
runtime error
์ ์ฒด์ ์ธ ๋ฌธ์ ๋ ์์ด ๋ณด์ด์ง๋ง ๋ฐํ์ ์๋ฌ๊ฐ ๋ฐ์ํ๋ค.
import java.util.LinkedList;
import java.util.Queue;
import java.util.Scanner;
class Main {
int[] dt = {5, 1, -1};
int[] ch;
int L;
private int BFS(int s, int e) {
Queue<Integer> Q = new LinkedList<>();
ch = new int[10001];
ch[s] = 1;
Q.offer(s);
while (!Q.isEmpty()) {
int len = Q.size();
for (int i = 0; i < len; i++) {
int nx = Q.poll();
for(int x : dt) {
if (ch[nx + x] == 0) {
if (nx + x == e) return L + 1;
Q.offer(nx + x);
ch[nx + x] = 1;
}
}
}
L++;
}
return 0;
}
public static void main(String[] args) {
Main T = new Main();
Scanner in = new Scanner(System.in);
int s = in.nextInt();
int e = in.nextInt();
System.out.println(T.BFS(s, e));
}
}
๊ทธ ์ด์ ๋ ์กฐ๊ฑด์ ๋ฌธ์ ์๋ค. ์กฐ๊ฑด์์
[[์ฒซ ๋ฒ์งธ ์ค์ ํ์์ ์์น S์ ์ก์์ง์ ์์น E๊ฐ ์ฃผ์ด์ง๋ค. ์ง์ ์ ์ขํ ์ ์ 1๋ถํฐ 10,000๊น์ง์ด๋ค.]]
๋ผ๊ณ ํ๊ธฐ ๋๋ฌธ์ ์กฐ๊ฑด์ ์ด๋ฅผ ์ถ๊ฐํด์ค์ผ ํ๋ค. ๊ทธ๋ ์ง ๋ชปํ๋ฉด ch ์ธ๋ฑ์ค๋ฅผ ๋ฃ์ ๋ ์์๊ฐ ๋ค์ด์ฌ ๊ฒฝ์ฐ ์๋ฌ๊ฐ ๋ฐ์ํ๋ฉด์ ๋ฐํ์ ์๋ฌ๊ฐ ๋ฐ์ํ๋ ๊ฒ์ด๋ค.
ch๋ผ๋ ์ฒดํฌ์ฉ ๋ฐฐ์ด์ ๋ง๋ค๋ฉด ์๋ ๊ณณ์ ํ ๋ฒ ๋ ์ค๋ ๊ฒฝ์ฐ๋ฅผ ์์จ ๋ฟ๋ง ์๋๋ผ, ์์๋ก ๊ฐ๋ ๊ฒฝ์ฐ๋ ๋ง์์ค๋ค.
ํ์ง๋ง 1~10000์ด๋ผ๋ ์กฐ๊ฑด์ด ์์ ๊ฒฝ์ฐ ๋ฐฐ์ด๋ก ํตํด ์ค๋ณต๋ ๊ฐ์ ํ์ธํ๋ ๊ฒ์ ์ ๋ ๊ฒ์ผ๋ก ๋ณด์ธ๋ค !!
์ฆ, ํ์ธ์ฉ ๋ฐฐ์ด์ ์ฌ์ฉํ๊ธฐ ์ํด์๋ ์์์ธ ์ ์์ ์กฐ๊ฑด์ด ํ์ํ๋ค.
import java.util.LinkedList;
import java.util.Queue;
import java.util.Scanner;
class Main {
int[] dt = {5, 1, -1};
int[] ch;
int L;
private int BFS(int s, int e) {
Queue<Integer> Q = new LinkedList<>();
ch = new int[10001];
ch[s] = 1;
Q.offer(s);
while (!Q.isEmpty()) {
int len = Q.size();
for (int i = 0; i < len; i++) {
int nx = Q.poll();
for(int x : dt) {
int na = nx + x;
if (na >=1 && na <= 10000 && ch[na] == 0) {
if (na == e) return L + 1;
Q.offer(na);
ch[na] = 1;
}
}
}
L++;
}
return 0;
}
public static void main(String[] args) {
Main T = new Main();
Scanner in = new Scanner(System.in);
int s = in.nextInt();
int e = in.nextInt();
System.out.println(T.BFS(s, e));
}
}
-๊ฐ์ฌ๋ ํ์ด-
import java.util.*;
class Main{
int answre = 0;
int[] dis = {1, -1, 5};
int[] ch;
Queue<Integer> Q = new LinkedList<>();
public int BFS(int s, int e) {
ch = new int[10001];
ch[s] = 1;
Q.offer(s);
int L = 0;
while (!Q.isEmpty()) {
int len = Q.size();
for (int i = 0; i < len; i++) {
int x = Q.poll();
for (int j = 0; j < 3; j++) {
int nx = x + dis[j];
if (nx == e) return L + 1;
if (nx >= 1 && nx <= 10000 && ch[nx] == 0) {
ch[nx] = 1;
Q.offer(nx);
}
}
}
L++;
}
return -1;
}
public static void main(String[] args) {
Main T = new Main();
Scanner in = new Scanner(System.in);
int s = in.nextInt();
int e = in.nextInt();
System.out.println(T.BFS(s, e));
}
}
'์ฝ๋ฉํ ์คํธ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[BFS] 10. ๋ง๋จ๋ ธ๋๊น์ง์ ๊ฐ์ฅ ์งง์ ๊ฒฝ๋ก (1) | 2024.02.06 |
---|---|
[DFS] 9. Tree ๋ง๋จ๋ ธ๋๊น์ง์ ๊ฐ์ฅ ์งง์ ๊ฒฝ๋ก (0) | 2024.02.04 |
[BFS] 7. ์ด์งํธ๋ฆฌ ๋ ๋ฒจํ์ (0) | 2024.02.02 |
[DFS] 6. ๋ถ๋ถ ์งํฉ ๊ตฌํ๊ธฐ (0) | 2024.02.02 |
[์ฌ๊ท, ๋ฉ๋ชจ๋ฆฌ์ ์ด์ ] 4. ํผ๋ณด๋์น์์ด (0) | 2024.02.01 |
๋๊ธ