๐ก ์ธ์ DFS๋ฅผ ์ฐ๊ณ , ๋ ์ธ์ BFS ์ธ์ง ๊ฒฐ์ ํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค!
โ ๊ฐ ์๊ณ ๋ฆฌ์ฆ์ ํน์ง์ ์ดํดํ๊ณ , ๋ฌธ์ ๋ณ๋ก ์ด์ธ๋ฆฌ๋? ์๊ณ ๋ฆฌ์ฆ์ ๊ณจ๋ผ์ผ ๋น ๋ฅด๊ฒ ํ ์ ์์ต๋๋ค.
์ต๋ํ ๊น์ด ์ด๋ํ ๋ค, ๋์ด์ ๊ฐ๊ณณ์ด ์์๊ฒฝ์ฐ ์ด์ ๋
ธ๋๋ก ์ด๋ํ๊ณ ๋ค์ ํ์ํ๋ ์๊ณ ๋ฆฌ์ฆ
์ฌ๊ทํจ์ or ์คํ์ ์ด์ฉํด์ ๊ตฌํ
๋
ธ๋๋ฅผ ๋ฐฉ๋ฌธํ๋ ์์ (1๋ฒ์์)
1->2->6->7 (๋ค์1)->3->4->5
void dfs(ํด๋น ๋
ธ๋ ์ ๋ณด){
for(int i=0;i<cur์ ์ฃ์ง ๊ฐ์;i++){
if(visited[cur์ด ๊ฐ๋ฆฌํค๋ ๋ค์๋
ธ๋] == true) { // ์ด๋ฏธ ๋ฐฉ๋ฌธํ์
continue;
}
visited[๋ค์๋
ธ๋] = true;
dfs(๋ค์๋
ธ๋์ ๋ณด); // ๋ฐ๋ก ๋ค์ ๋
ธ๋๋ก ์ด๋(๊น๊ฒํ์ํจ)
}
}
์ต๋ํ ๋๊ฒ ์ด๋ํ ๋ค์(์ฃผ์), ๋ ์ด์ ๊ฐ๊ณณ์ด ์์๊ฒฝ์ฐ ๋ค์ ๋ ธ๋๋ก ์ด๋ํด์ ๋ค์ ํ์ํ๋ ์๊ณ ๋ฆฌ์ฆ
ํ๋ฅผ ์ด์ฉํด์ ๊ตฌํ
๋
ธ๋๋ฅผ ๋ฐฉ๋ฌธํ๋ ์์(1๋ฒ์์)
1->2->3->6->4->7->5
์ธ์ ํ ๋
ธ๋๋ฅผ ๋จผ์ ๋ฐฉ๋ฌธํ๋ ์๊ณ ๋ฆฌ์ฆ
q.push(root๋
ธ๋์ ๋ณด)
while(!q.empty()){
cur = q.front();
q.pop();
for(int i=0;i<cur์ ์ฃ์ง ๊ฐ์;i++){
if(visited[cur์ด ๊ฐ๋ฆฌํค๋ ๋ค์๋
ธ๋] == true) { // ์ด๋ฏธ ๋ฐฉ๋ฌธํ์
continue;
}
visited[๋ค์๋
ธ๋] = true;
q.push(๋ค์๋
ธ๋์ ๋ณด); // ํ์ ๋ฃ์ด๋๊ณ ๋์ค์ ๋ฐฉ๋ฌธ(ํ์ฌ๋ ์ฃผ์๋
ธ๋๋จผ์ ๋ฐฉ๋ฌธํ๋ค)
}
}
์ธ์ DFS๋ฅผ ์ฐ๊ณ ๋ ์ธ์ BFS๋ฅผ ์ธ๊น
CASE 1 - ๋ชจ๋ ๋ ธ๋(์ ์ )๋ฅผ ํ์ํ ๋
์ด๋ค ์๊ณ ๋ฆฌ์ฆ์ ์ฐ๋ ์๊ด์๋ค
๋ฌธ์ ์์
10026๋ฒ: ์ ๋ก์์ฝ / 2573๋ฒ: ๋น์ฐ
์ ๋ฌธ์ ๋ค์ ์ฐ๊ฒฐ๋ ๋ ธ๋๋ค์ ์ฐพ๊ธฐ๋ง ํ๋ฉด ๋๊ธฐ ๋๋ฌธ์ ์ด๋ค ์๊ณ ๋ฆฌ์ฆ์ ์ฐ๋ ์๊ด์๋ค
CASE 2 - ์ต๋จ๊ฑฐ๋ฆฌ๋ฅผ ์ฐพ์๋ (์ต๋ํ ๋ ธ๋๋ฅผ ์ ๊ฒ ๋ฐฉ๋ฌธํ๋ ๊ฒฝ์ฐ์ ์๋ฅผ ๊ตฌํ ๋) or ์ฃผ์๋ฅผ ์ฐ์ ์ ์ผ๋ก ํ์ํด์ผ ํ ๋
์ธ์ ๋ ธ๋๋ฅผ ์ฐ์ ์ ์ผ๋ก ํ์ํ๋ BFS๊ฐ ์ ๋ฆฌํ๋ค.
๋ฌธ์ ์์
7576๋ฒ: ํ ๋งํ / 2206๋ฒ: ๋ฒฝ ๋ถ์๊ณ ์ด๋ํ๊ธฐ
์ ๋ฌธ์ ๋ค์ ๋ชจ๋ ๋ ธ๋๋ฅผ ํ์ํ๋๋ฐ, ์ต๋จ๊ฑฐ๋ฆฌ๋ฅผ ์ฐพ๋ ๋ฌธ์ ์ด๋ค.
์ด๋ DFS๋ก ๊ตฌํ ์๋ ์์ง๋ง BFS์ ๋นํด ๋นํจ์จ์ ์ด๋ค. (์ธ์ ๊ฐ ์ต์์ธ์ง ๋ฐ๋ก๋ฐ๋ก ์ ์ ์๋ค)
๊ฐ์ฅ ๊ฐ๊น์ด ๋ ธ๋๋ถํฐ ํ์ํ๋ BFS๋ฅผ ์ด์ฉํด์ผ ํ๋ค.
CASE 3 - ๊ฒฝ๋ก์ ํน์ง์ ์ ์ฅํ๊ณ ํ์ํ๋ ๋ฌธ์
ํ์ฌ ๊ทธ๋ํ์ ์ฌ์ดํด์ ๊ตฌํ๋ ๋ฌธ์ , ์ง๊ธ๊น์ง ์๋ ๋ ธ๋๋ค์ ์ ๋ณด๋ค์ ์ ์ฅํด๋์ผ ํ๋ ๋ฌธ์ , ...
์ด๋๋ DFS๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ๋ ์ข๋ค.
๋ฌผ๋ก ํ์ฌ ์ํ๋ฅผ ์ ์ฅํด์ ๋ค์ ๋
ธ๋๋ก ์ ๋ฌํ๋ ๊ฐ๋จํ ๋ฌธ์ ๋ BFS๋ก๋ ๊ตฌํ์ด ๊ฐ๋ฅํ์ง๋ง, ์ํ๋ฅผ ์ ์ฅํ๋ ๋ฌธ์ ๋๋ถ๋ถ์ DFS๋ฅผ ์ผ์๋ ์ข๋ ์ฝ๊ฒ ํ๋ฆฐ๋ค.
์ต๋จ๊ฑฐ๋ฆฌ๋ BFS ์๊ณ ๋ฆฌ์ฆ์ด ๋งค์ฐ ํจ์จ์ ์ด๊ธฐ ๋๋ฌธ์, BFS๋ฅผ ์ฌ์ฉํ๋ฉด ๋์ง๋ง,
DFS๋ฅผ ์ ์ฉํ๋ ๋ฌธ์ ๋ (์ต๋จ๊ฑฐ๋ฆฌ ๋ฌธ์ ์ ๋นํด) ๋ฐ๋ก๋ฐ๋ก ์บ์น๊ฐ ์๋๋ค.
๋ฐ๋ผ์ ์ต๋จ๊ฑฐ๋ฆฌ ์ด์ธ์ ๋ค๋ฅธ ๊ฒฝ์ฐ๋ ์ฌ๋งํ๋ฉด DFS๋ก ์๋๋ฅผ ํด๋ณด์.
์ฌ์ค ์ด๋ฒ๊ธ์ ์ด ์๊ณ ๋ฆฌ์ฆ์ ๋ค๋ฃจ๊ณ ์ถ์ด์ ์์ฑํ์ต๋๋ค
์์ ์๊ณ ๋ฆฌ์ฆ์ visited๋ฅผ ์ด์ฉํด์ ์ด์ ์ ๋ฐฉ๋ฌธํ ๋ ธ๋๋ ๋ฐฉ๋ฌธํ์ง ์๋ ๊ฐ๋จํ ์๊ณ ๋ฆฌ์ฆ์ด๋ค.
์ง๊ธ๋ถํฐ ์์๋ณผ ์๊ณ ๋ฆฌ์ฆ์ ํ์ฌ ๋ ธ๋๋ฅผ ๋ฐฉ๋ฌธํ์๋ visited=true ์ฒดํฌ ํ ์ฃผ๋ณ ๋ ธ๋๋ฅผ ์ ๋ถ ํ์ํ ์๊ธฐ์์ ๋ ธ๋์ visited๋ฅผ false๋ก ๋๋ฆฌ๋ ๊ธฐ์กด๊ณผ๋ ์ด์ง? ๋ค๋ฅธ ์๊ณ ๋ฆฌ์ฆ์ด๋ค.
void dfs(ํด๋น ๋
ธ๋ ์ ๋ณด){
for(int i=0;i<cur์ ์ฃ์ง ๊ฐ์;i++){
if(visited[cur์ด ๊ฐ๋ฆฌํค๋ ๋ค์๋
ธ๋] == true) { // ์ด๋ฏธ ๋ฐฉ๋ฌธํ์
continue;
}
visited[๋ค์๋
ธ๋] = true;
dfs(๋ค์๋
ธ๋์ ๋ณด); // ๋ฐ๋ก ๋ค์ ๋
ธ๋๋ก ์ด๋(๊น๊ฒํ์ํจ)
visited[๋ค์๋
ธ๋] = false; // ************** false๋ก ๋ค์ ๋๋๋ฆผ ***************
}
}
์ด๋ฐ ์๊ณ ๋ฆฌ์ฆ์ด ํ์ํ ๊ฒฝ์ฐ๋ ์ธ์ ์ผ๊น?
๊ธฐ์กด์ dfs, bfs ์๊ณ ๋ฆฌ์ฆ์ผ๋ก๋ ๋ชปํธ๋ ๊ฒฝ์ฐ์ ์ด ์๊ณ ๋ฆฌ์ฆ์ด ํ์ํ ๊ฒฝ์ฐ๊ฐ ์๋ค.
๋ค์ ๊ฒฝ์ฐ๋ฅผ ๋ณด์.
์ด๋ฌํ ํํ์ ๊ทธ๋ํ๊ฐ ์๋๋ฐ 1๋ฒ์์ ์ถ๋ฐํ์๋ ์ต๋ ์ด๋๊ฑฐ๋ฆฌ๋ฅผ ๊ตฌํด๋ณด์(๊ฐ์ค์น๋ ๋ชจ๋ 1)
์ผ๋ฐ์ ์ธ dfs๋ก ํผ๋ค๋ฉด ๋ฐฉ๋ฌธ ์์๋
1 โ 2 โ 6 โ 7
(๋ค์1) โ 3 โ 4 โ 5
์ฌ๊ธฐ์ ๋๋๊ฒ ๋๋ค. (visited๋๋ฌธ์ ์ ์ ๋ฐฉ๋ฌธํ ๋
ธ๋๋ ๋ฐฉ๋ฌธํ์ง ์์)
์ด๋ ๊ฒ ๋๋ฉด ๋ต์ 4๋ก ๋์ค๋๋ฐ, ์ฌ์ค ์ด๋ฌธ์ ์ ๋ต์ (1โ3โ4โ5โ6โ7) 6์ด ๋๋ค.
์ ์ด๋ฐ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์๊น?
visited๋๋ฌธ์ ์ด์ ์ ๋ฐฉ๋ฌธํ ๋
ธ๋๋ ๋ฐฉ๋ฌธํ์ง ๋ชปํ๊ธฐ ๋๋ฌธ์ ์ต๋๊ฐ์ ๊ตฌํ์ง ๋ชปํ๋ค.
(3์ ๋จผ์ ๋ฐฉ๋ฌธํ๋ค๋ฉด ๋ต์ ๊ตฌํ๊ฒ ์ง๋ง, ์ด๋ฐ ์กฐ๊ฑด๋ถ ๋ต์ ์๊ฐํ์ง ์๋๋ค)
์ด์ฒ๋ผ ๊ทธ๋ํ๋ฅผ ์ด์ฉํ์๋ ํน์ ๋ ธ๋๋ฅผ ํ๋ฒ๋ง ๋ฐฉ๋ฌธํ๋ฉด ์๋๋ ๊ฒฝ์ฐ์ ์ด ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ ์ ์๋ค.
ex) ๋ ธ๋๋ฅผ ์ต๋ํ ๋ง์ด ๋ฐฉ๋ฌธํ๋ ๋ฌธ์
์ค์ ๋ฌธ์ ์์๋ฅผ ๋ณด์
1987๋ฒ: ์ํ๋ฒณ
2์ฐจ์ ๋ฐฐ์ด์ด ์ฃผ์ด์ง ์ํฉ์์, ์ฒซ๋ฒ์งธ ์์น([0][0])์์ ์ํ์ข์ฐ๋ก ์ด๋์ ์์ํ๋๋ฐ, ์๋ก ์ด๋ํ ์นธ์ ์ ํ ์๋ ์ํ๋ฒณ์ ์ง๊ธ๊น์ง ์ง๋์จ ๋ชจ๋ ์นธ์ ์ ํ ์๋ ์ํ๋ฒณ๊ณผ๋ ๋ฌ๋ผ์ผ ํ๋ค. ์ฆ, ๊ฐ์ ์ํ๋ฒณ์ด ์ ํ ์นธ์ ๋ ๋ฒ ์ง๋ ์ ์๋ค. ์ด๋ ์ต๋ ์ด๋๊ฑฐ๋ฆฌ๋ฅผ ๊ตฌํด์ผ ํ๋ค.
์ด๋ฌธ์ ๋ ๊ธฐ์กด์ dfs, bfs๋ก๋ ํ์์๋ค.
์ต๋ ์ด๋๊ฑฐ๋ฆฌ๊ธฐ ๋๋ฌธ์, ๊ธฐ์กด์ ๋ฐฉ๋ฌธํ ๋
ธ๋๋ฅผ ๋ค์ ๋ฐฉ๋ฌธํด์ผ๋ง ํ๋ค.
๋ ๋ค๋ฅธ ๋ฌธ์ ๋ฅผ ๋ณด์
1103๋ฒ: ๊ฒ์
์ ๋ฌธ์ ์ ์กฐ๊ฑด์ ์กฐ๊ธ ๋ค๋ฅด์ง๋ง, ์ด๋ฌธ์ ์ญ์ ์ต๋ํ ๋ ธ๋๋ฅผ ๋ง์ด ๋ฐฉ๋ฌธํ์๋์ ๊ฐ์ ๊ตฌํ๋ ๋ฌธ์ ์ด๋ค.
์ด๋ ๊ฒ ์ต๋ ๋ ธ๋ ๋ฐฉ๋ฌธ ๊ฐ์์ ๊ด๋ จ์๋ ๋ฌธ์ ๋ ์ด ์๊ณ ๋ฆฌ์ฆ์ ์ด์ฉํ์
๋ค์ ๋ ธ๋์ ๋ฐฉ๋ฌธํ๊ธฐ ์ ์ visited์ true๋ฅผ ์ ๋ ฅํ๊ธฐ๋๋ฌธ์, ํ์ฌ ์์น์์ ์ด์ ๊น์ง ๋ฐฉ๋ฌธํ ๋ ธ๋๋ ๋ค์ ๋ฐฉ๋ฌธํ์ง ์์ต๋๋ค.
visited์์ด dfs๋ฅผ ๋๋ฆฌ๋ฉด ๋ฌดํ๋ฃจํ์ ๋น ์ง ์ํ์ด ์์ต๋๋ค.
๊ทธ๋ ๋ค๋ฉด ์ด ์๊ณ ๋ฆฌ์ฆ์ ์๊ฐ๋ณต์ก๋๋ ์ด๋์ ๋์ผ๊น?
ํ๊ณผ ์ด์ด n์ธ ์ํ์ข์ฐ๋ก ์ด๋๊ฐ๋ฅํ 2์ฐจ์ ๋ฐฐ์ด์ ๊ธฐ์ค์ผ๋ก ์ด ์๊ณ ๋ฆฌ์ฆ์ ์ฝ๋๋ฅผ n=2๋ถํฐ n=6๊น์ง ๋๋ ค๋ดค๋๋ฐ,
n | ๋ ธ๋๋ฅผ ๋ฐฉ๋ฌธํ ํ์ |
---|---|
2 | 5 |
3 | 51 |
4 | 1271 |
5 | 90111 |
6 | 18470411 |
๋๋ ์์ด ์ฆ๊ฐํ๋ค.
๊ต์ฅํ ๋นํจ์จ์ ์ธ ์๊ณ ๋ฆฌ์ฆ์ด๋ค.
์ด ์๊ณ ๋ฆฌ์ฆ์ ์ฐ๋ ๋ฌธ์ ๋ค์ ์ธํ์ด ๊ต์ฅํ ์๊ณ , visited ์ธ์ ๋ค๋ฅธ ์ ํ์กฐ๊ฑด์ด ๋ง์ด ๋ฌ๋ ค์๋ค.
์ฌ์ค ์ด ์๊ณ ๋ฆฌ์ฆ์ ํ ๋ ธ๋๋ฅผ ๊ต์ฅํ ๋ง์ด ๋ฐฉ๋ฌธํ๋ค -> ์ํ๊ฐ ์ค๋ณต๋๋ค
์ด ์๊ณ ๋ฆฌ์ฆ์ ์ธ๋๋ ์ต์ ํ๋ฅผ ์ํด dp๋ฅผ ์ฐ๋ ๊ฒฝ์ฐ๋ ์๋ค.
๊ทธ๋ฅ ์ต๋ํ ๋
ธ๋๋ฅผ ์ ๊ฒ ๋ฐฉ๋ฌธํ๋ ๊ฒฝ์ฐ์์๋ฅผ ๊ตฌํ๋ค๋ฉด BFS,
ํน์ ๋
ธ๋๋ฅผ ํ๋ฒ๋ง ๋ฐฉ๋ฌธํ๋ฉด ์๋๋ ๋ฌธ์ (ex - ๋
ธ๋๋ฅผ ์ต๋ํ ๋ง์ด ๋ฐฉ๋ฌธํ๋ ๋ฌธ์ )๋ ํน์ดํ DFS,
(์ธํ์ด ๊ต์ฅํ ์์๋ & ๋ค๋ฅธ ์ ํ์กฐ๊ฑด์ด ์์๋ ๊ฐ๋ฅ)
๋๋จธ์ง๋ DFS๋ฅผ ์ฐ์
๊ทธ๋ํ ํ์์ ํ ๋ ์ค๋ณต ๋ฐฉ์ง๋ฅผ ์ํด visited ๋ฐฐ์ด์ ์ด์ฉํ๋ค.
์ด๋ ๋ฌธ์ ์ ๋ฐ๋ผ ๋ค์ํ visited๊ฐ ์๋ค.
(ํ๊ณผ ์ด์ด n์ธ 2์ฐจ์ ๋ฐฐ์ด ๊ธฐ์ค)
์ผ๋ฐ์ ์ธ visited
https://www.acmicpc.net/problem/1012 ์ ๊ธฐ๋ ๋ฐฐ์ถ ๋ฌธ์
์ผ๋ฐ์ ์ธ ๊ทธ๋ํ ํ์ ๋ฌธ์ ์ด๋ค.
๋งํผ visited ๋ฐฐ์ด์ ์ ์ธํด์ฃผ๋ฉด ๋๋ค.
์ผ๋ฐ์ ์ด์ง ์์ visited
(2-1) https://www.acmicpc.net/problem/13459 ๊ตฌ์ฌํ์ถ ๋ฌธ์
๋นจ๊ฐ ๊ตฌ์ฌ๊ณผ ํ๋ ๊ตฌ์ฌ, ๊ฐ๊ฐ ๊ตฌ์ฌ์ ์์น ๋ณ๋ก visited๋ฅผ ์ฒดํฌํด์ค์ผ ํ๋ค.
๋ก visited ๋ฐฐ์ด์ ์ ์ธํด์ค์ผ ํ๋ค.
(2-2) https://school.programmers.co.kr/learn/courses/30/lessons/67259#
๊ฒฝ์ฃผ๋ก ๊ฑด์ค ๋ฌธ์
๊ฐ์ ์์น๋ผ๋ ์์์ ์๋์ง, ์ค๋ฅธ์ชฝ์์, ์ผ์ชฝ์์, ์๋์์ ์๋์ง 4๊ฐ์ง๋ฅผ ๋ฐ๋ก ์ฒดํฌํด์ค์ผ ํ๋ค.
๋ก visited ๋ฐฐ์ด์ ์ ์ธํด์ค์ผ ํ๋ค.
์ด๋ฌธ์ ๋ฅผ ํน์ดํ DFS์ DP๋ฅผ ์ด์ฉํด์ ํ์์ต๋๋ค.
์ ์๊ฐ์ ๊ทธ๋๋ก ์ผ๊ธฐ ๋๋ฌธ์ ํ๋ฆฐ ๋ถ๋ถ์ด ์์ ์ ์์ต๋๋ค.
์ง์ , ํผ๋๋ฐฑ ํ์ํฉ๋๋ค.
์ข์ ๊ธ์ด๋ค์. ๊ณต์ ํด์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค.