์๊ณ ๋ฆฌ์ฆ
๊ทธ๋ํ ํ์ ์๊ณ ๋ฆฌ์ฆ, DFS(Depth-First Search)
alswlfl
2026. 4. 4. 23:33
DFS(๊น์ด ์ฐ์ ํ์)
- ํน์ ๋ฐฉํฅ์ผ๋ก ์ต๋ํ ๊น์ด ๋ค์ด๊ฐ์ ๋น ์ ธ๋์ค๋ ๋ฐฉ์
- DFS๋ ์คํ ์๋ฃ๊ตฌ์กฐ ์ฌ์ฉ
์คํ(Stack): ๋จผ์ ๋ค์ด์จ ๋ฐ์ดํฐ๊ฐ ๋์ค์ ๋๊ฐ๋ ํ์ → FILO
- DFS๋ 2์ฐจ์ ๋ฐฐ์ด(๋ฆฌ์คํธ)๋ก ๊ทธ๋ํ ํํ
- ๊ทธ๋ํ ํน์ ํธ๋ฆฌ์์ ๋ชจ๋ ๋ ธ๋๋ฅผ ํ ๋ฒ์ฉ ํ์ํ๊ธฐ ์ํ ๊ธฐ๋ณธ์ ์ธ ๋ฐฉ๋ฒ์ผ๋ก, ์์ ํ์ ์ํํ๊ธฐ ์ํด ์ฌ์ฉํ ์ ์๋ ๊ฐ์ฅ ๊ฐ๋จํ ๋ฐฉ๋ฒ ์ค ํ๋
์ธ์ ๋ฆฌ์คํธ ํํ ๋ฐฉ์

| 0 | |
| 1 | 2, 3 |
| 2 | 1, 5 |
| 3 | 1, 4, 5 |
| 4 | 3, 5 |
| 5 | 2, 3, 4 |
๊ธฐ๋ณธ ๋์ ๋ฐฉ์
- ์์ ๋ ธ๋๋ฅผ ์คํ์ ๋ฃ๊ณ [๋ฐฉ๋ฌธ ์ฒ๋ฆฌ]
- ์คํ์ ๋ง์ง๋ง์ผ๋ก ๋ค์ด์จ ๋
ธ๋์ ๋ฐฉ๋ฌธํ์ง ์์ ์ธ์ ๋
ธ๋๊ฐ ์๋์ง ํ์ธ
• ์๋ค๋ฉด, ๋ฐฉ๋ฌธํ์ง ์์ ์ธ์ ๋ ธ๋๋ฅผ ์คํ์ ์ฝ์ ํ๊ณ [๋ฐฉ๋ฌธ ์ฒ๋ฆฌ]
• ์๋ค๋ฉด, ํ์ฌ ๋ ธ๋(์คํ์ ๋ง์ง๋ง์ผ๋ก ๋ค์ด์จ ๋ ธ๋)๋ฅผ ์คํ์์ ์ถ์ถ - 2๋ฒ ๊ณผ์ ์ ๋ ์ด์ ๋ฐ๋ณตํ ์ ์์ ๋๊น์ง ๋ฐ๋ณต
์ฆ, ๊ฐ ๋ ธ๋ ๋ฐ ๊ฐ์ ์ ๋ํด ํ ๋ฒ์ฉ๋ง ํ์ธ

| A | B, C, D |
| B | A |
| C | A, E, F |
| D | G |
| E | C, H |
| F | C |
| G | D |
| H | E |
๋ ธ๋ ๋ฐฉ๋ฌธ ์์: A → B → C → E → H → F → D → G
๊ตฌํ ํน์ง
- ์คํ ํน์ ์ฌ๊ทํจ์ ์ด์ฉ
- ์์ ํ์์ ๋ชฉ์ ์ผ๋ก ํ๋ ๊ฒฝ์ฐ, ํ์ ์๋๊ฐ BFS๋ณด๋ค ๋๋ฆผ
- ๊ตฌํ์ ํธ๋ฆฌ์ฑ ๋๋ฌธ์ BFS ๋์ DFS๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง์
์ฌ์ฉ ์์
- ๋ ์งง์ ์ฝ๋๋ก ๊ฐ๊ฒฐํ ๊ตฌํํด์ผ ํ๋ ๊ฒฝ์ฐ
- ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ ์ ์๋ ๊ฒฝ์ฐ
- ํธ๋ฆฌ์ ์ํ, ์ ํ์ ๊ตฌํ ๋ฑ DFS์ ํนํ๋ ๋ฌธ์ ์ธ ๊ฒฝ์ฐ
- ํธ๋ฆฌ์์ ์ต๋จ ๊ฑฐ๋ฆฌ ํ์์ ๊ตฌํ๋ ๊ฒฝ์ฐ(ํธ๋ฆฌ์์๋ ๋ ๋ ธ๋๋ฅผ ์๋ ๊ฒฝ๋ก๊ฐ ํ๋๋ง ์กด์ฌ)
DFS ์์ค ์ฝ๋ ์์
๋๋ฌ ๊ฐ๋ฅํ ๋ ์์น๊น์ง ๋๋ฌํ๋ค๋ฉด, ๋ค์ ์ต๊ทผ์ ๊ฐ๋ฆผ๊ธธ๋ก ๋์๊ฐ์ ๋ค๋ฅธ์์น๋ก๋ ๊ฐ๋ณด๋ ๋ฐฉ์๊ณผ ์ ์ฌ
function dfs(graph, v, visited) {
visited[v] = true; // ํ์ฌ ๋
ธ๋ ๋ฐฉ๋ฌธ ์ฒ๋ฆฌ
console.log(v);
// ํ์ฌ ๋
ธ๋์ ์ฐ๊ด๋ ๋ค๋ฅธ ๋
ธ๋๋ฅผ ์ฌ๊ท์ ์ผ๋ก ๋ฐฉ๋ฌธ
for (const i of graph[v]) {
if (!visited[i]) {
dfs(graph, i, visited);
}
}
}
// ๊ฐ ๋
ธ๋๊ฐ ์ฐ๊ฒฐ๋ ์ ๋ณด๋ฅผ ํํ
const graph = [
[], // ํธ์์ฑ์ ์ํด 0๋ฒ ๋
ธ๋ ์ฌ์ฉํ์ง ์์
[2, 3, 4],
[1],
[1, 5, 6],
[1, 7],
[3, 8],
[3],
[4],
[5],
];
// ๊ฐ ๋
ธ๋๊ฐ ๋ฐฉ๋ฌธ๋ ์ ๋ณด๋ฅผ ํํ
const visited = Array(9).fill(false);
// ์ ์๋ DFS ํจ์ ํธ์ถ
dfs(graph, 1, visited);