01-10 04:27
Recent Posts
Recent Comments
Tags
- ์กํ๊ณ
- ๋ฐ์ดํฐ๋ฒ ์ด์ค
- ์คํฝ์ค๋น
- ์จ์ผ๋ํ
- ์๋ฐ
- mysql
- Naver Cloud
- ICT
- ํ์ด์
- DATABASE
- SQL
- API๋ง์ผํ๋ ์ด์ค
- ํ์ด์ฌ
- python
- RaspberryPi
- ํ์ด์๊ณต๋ชจ์
- TSQL
- ํ๋ก๋ณด๋ ธ
- ict๊ณต๋ชจ์
- Spring
- linux
- API MarketPlace ๊ธ๋ก๋ฒ ์ํฌํฐ์ฆ
- JOBํ๊ณ
- Java
- ์คํฝ๋ ํ
- appetizer
- DB
- ์๋์ด๋ ธ
- ICT๋ฉํ ๋ง
- ์ด๋ธ์
- Today
- Total
miinsun
[BAEKJOON] ๋ฐฑ์ค ๊ทธ๋ํ 1260 :: DFS์ BFS ๋ณธ๋ฌธ
๐ฌ ๋ฌธ์ ์ค๋ช
๊ทธ๋ํ๋ฅผ DFS๋ก ํ์ํ ๊ฒฐ๊ณผ์ BFS๋ก ํ์ํ ๊ฒฐ๊ณผ๋ฅผ ์ถ๋ ฅํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
๋จ, ๋ฐฉ๋ฌธํ ์ ์๋ ์ ์ ์ด ์ฌ๋ฌ ๊ฐ์ธ ๊ฒฝ์ฐ์๋ ์ ์ ๋ฒํธ๊ฐ ์์ ๊ฒ์ ๋จผ์ ๋ฐฉ๋ฌธํ๊ณ ,
๋ ์ด์ ๋ฐฉ๋ฌธํ ์ ์๋ ์ ์ด ์๋ ๊ฒฝ์ฐ ์ข ๋ฃํ๋ค. ์ ์ ๋ฒํธ๋ 1๋ฒ๋ถํฐ N๋ฒ๊น์ง์ด๋ค.
๐จ ์ ์ถ๋ ฅ ์
์ ๋ ฅ
- ์ฒซ์งธ ์ค์ ์ ์ ์ ๊ฐ์ N(1 ≤ N ≤ 1,000), ๊ฐ์ ์ ๊ฐ์ M(1 ≤ M ≤ 10,000), ํ์์ ์์ํ ์ ์ ์ ๋ฒํธ V๊ฐ ์ฃผ์ด์ง๋ค.
- ๋ค์ M๊ฐ์ ์ค์๋ ๊ฐ์ ์ด ์ฐ๊ฒฐํ๋ ๋ ์ ์ ์ ๋ฒํธ๊ฐ ์ฃผ์ด์ง๋ค.
- ์ด๋ค ๋ ์ ์ ์ฌ์ด์ ์ฌ๋ฌ ๊ฐ์ ๊ฐ์ ์ด ์์ ์ ์๋ค.
- ์ ๋ ฅ์ผ๋ก ์ฃผ์ด์ง๋ ๊ฐ์ ์ ์๋ฐฉํฅ์ด๋ค.
์ถ๋ ฅ
- ์ฒซ์งธ ์ค์ DFS๋ฅผ ์ํํ ๊ฒฐ๊ณผ๋ฅผ, ๊ทธ ๋ค์ ์ค์๋ BFS๋ฅผ ์ํํ ๊ฒฐ๊ณผ๋ฅผ ์ถ๋ ฅํ๋ค. V๋ถํฐ ๋ฐฉ๋ฌธ๋ ์ ์ ์์๋๋ก ์ถ๋ ฅํ๋ฉด ๋๋ค.
์์ ์ ๋ ฅ 1)
4 5 1
1 2
1 3
1 4
2 4
3 4
์์ ์ถ๋ ฅ 1)
1 2 4 3
1 2 3 4
์์ ์ ๋ ฅ 2)
5 5 3
5 4
5 2
1 2
3 4
3 1
์์ ์ถ๋ ฅ 2)
3 1 2 5 4
3 1 4 2 5
โ
์์ ์ ๋ ฅ 3)
1000 1 1000
999 1000
์์ ์ถ๋ ฅ 3)
1000 999
1000 999
โ
๐ป Main.java
- ์ค๋ณต ๋ฐฉ๋ฌธ์ ๋ง๊ธฐ ์ํด check[n] ๋ฐฐ์ด์ ๋ง๋ค์ด์ค๋ค.
- DFS๋ ์ฌ๊ท๋ฅผ ์ด์ฉํด์, BFS๋ Queue๋ฅผ ์ด์ฉํด์ ํ์ด์ค๋ค.
- ์ ๋ ฅ ์์ด ์ ๋ ฌ๋์๋๊ฒ ์๋๊ธฐ๋๋ฌธ์, (x,y), (y,x) ์ขํ๋ฅผ ๋ชจ๋ ์ ์ฅํด์ค๋ค.
/* ๋ฐฑ์ค ๊ทธ๋ - 1260 :: DFS์ BFS */
import java.util.*;
import java.io.*;
public class Main {
public void DFS(int n, int s, boolean[][] arr, boolean[] check) {
// DFS๋ ์ฌ๊ท๋ฅผ ์ด์ฉํด์ ํ์ด
// ๋ฐฉ๋ฌธํ ๋
ธ๋๋ check[i] true๋ก ํ์
check[s] = true;
System.out.print(s + " ");
for(int i = 1; i <= n; i++) {
if (!check[i]) {
if(arr[s][i]) {
// ์คํ์ ์์๊ฐ๋ฏ์ด ์ฌ๊ท๋ฅผ ์์์ค๋ค.
DFS(n, i, arr, check);
}
}
}
}
public void BFS(int n, int s, boolean[][] arr, boolean[] check) {
// BFS๋ queue๋ฅผ ์ด์ฉํด์ ํ
Queue<Integer> q = new LinkedList<>();
// ํ์์ ์์ํ ๋
ธ๋ v๋ถํฐ
// ๋ฐฉ๋ฌธํ ์ ์ ์ queue์ ๋ด๋๋ค.
for(int i = 1; i <= n; i++) {
if(arr[s][i]) {
check[i] = true;
q.offer(i);
}
}
// ๋ฐฉ๋ฌธ์ ์๋ฃํ๋ฉด check ํ์๋ฅผ ํด์ฃผ๊ณ
// ๋ฐฉ๋ฌธํ ์ ์ ์ ์ถ
check[s] = true;
System.out.print(s + " ");
while(!q.isEmpty()) {
// ๋ฐฉ๋ฌธํ ์ ์ ์์ ๊ฐ์ ๋ ๋ฒจ๋ก ๋ป์ด๋๊ฐ๋ค.
int tmp = q.poll();
System.out.print(tmp + " ");
for(int i = 1; i <= n; i++) {
if(!check[i]) {
if(arr[tmp][i]) {
q.offer(i);
check[i] = true;
}
}
}
}
}
public static void main(String[] args) throws IOException{
Main main = new Main();
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int n = Integer.parseInt(st.nextToken());
int m = Integer.parseInt(st.nextToken());
int v = Integer.parseInt(st.nextToken());
boolean[][] arr = new boolean [n + 1][n + 1];
boolean[] checkDFS = new boolean [n + 1];
boolean[] checkBFS = new boolean [n + 1];
for(int i = 0; i < m; i++) {
st = new StringTokenizer(br.readLine());
int x = Integer.parseInt(st.nextToken());
int y = Integer.parseInt(st.nextToken());
// 2,5์ 5,2๋ ๊ฐ์ ์ ์ ์ด๊ธฐ ๋๋ฌธ์
// (x,y) (y,x) ์ํ๋ฅผ ๋ชจ๋ ์ ์ฅํด์ค๋ค.
arr[x][y] = true;
arr[y][x] = true;
}
// DFS
main.DFS(n, v, arr, checkDFS);
System.out.println();
// BFS
main.BFS(n, v, arr, checkBFS);
br.close();
}
}
'Algorithm > Baekjoon' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[BAEKJOON] ๋ฐฑ์ค ๊ทธ๋ํ10451 :: ์์ด ์ฌ์ดํด (0) | 2022.03.30 |
---|---|
[BAEKJOON] ๋ฐฑ์ค ๊ทธ๋ํ 11724 :: ์ฐ๊ฒฐ ์์์ ๊ฐ์ (0) | 2022.03.29 |
[BAEKJOON] ๋ฐฑ์ค ๊ธฐ์ด ์ํ 9613 :: GCD ํฉ (0) | 2022.03.28 |
[BAEKJOON] ๋ฐฑ์ค ๊ธฐ์ด ์ํ 1850 :: ์ต๋๊ณต์ฝ์ (0) | 2022.03.27 |
[BAEKJOON] ๋ฐฑ์ค DP 9461 :: ํ๋๋ฐ ์์ด JAVA (0) | 2022.03.24 |
Comments