[์ด๋ก ] BFS์ DFS (javascript)
BFS (๋์ด ์ฐ์ ์ํ)
BFS๋?
BFS๋ Breadth-First-Search์ ์ค์๋ง์ ๋๋ค.
ํธ๋ฆฌ๋ฅผ ์ํํ ๋ ๊ฐ์ ๋ ๋ฒจ์ ๋ ธ๋(๋์ด)๋ฅผ ์ฐ์ ํ์ฌ ์ํํ๋ ์๊ณ ๋ฆฌ์ฆ์ ์๋ฏธํฉ๋๋ค. ์ฆ ํ์ฌ ๋ ธ๋์ ์์ ๋ ธ๋๋ณด๋ค ํ์ ๋ ธ๋๋ฅผ ์ฐ์ ํ์ฌ ํ์ํฉ๋๋ค.
๋ค์๊ณผ ๊ฐ์ ํธ๋ฆฌ (๊ทธ๋ํ) ๊ฐ ์์ ๋,
BFS๋ฅผ ์ด์ฉํ ์ํ ์์๋ ํด๋น ๊ทธ๋ฆผ๊ณผ ๊ฐ์ต๋๋ค.
![](https://blog.kakaocdn.net/dn/czjtPY/btsjNKR4nkH/8fzvkPqken9BL9ScYKk610/img.png)
BFS ๊ตฌํ ๋ก์ง
BFS์ ๊ตฌํํ๊ธฐ์ํ ๋ก์ง์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- ๋ฐฉ๋ฌธํ ๋ ธ๋๋ค์ ๊ธฐ์ตํ ๋ฐฐ์ด์ ์์ฑํด ์ค๋๋ค.
- ๋ฐฉ๋ฌธํด์ผ ํ๋ ๋ ธ๋๋ฅผ ๊ธฐ์ตํ ํ๋ฅผ ์์ฑํด ์ค๋๋ค.
- ๋ฐฉ๋ฌธํด์ผํ๋ ๋ ธ๋(= ํ์ ๊ธธ์ด)๊ฐ ์กด์ฌํ๋ ํ ํ์์ ๋ค์ ๋ฐฉ๋ฌธํ ๋ ธ๋๋ฅผ ๋ฝ์ ์ค๋๋ค.
- ๋ฝ์ ๋ ธ๋๊ฐ ์ด๋ฏธ ๋ฐฉ๋ฌธํ๋ ๋ ธ๋๊ฐ ์๋๋ผ๋ฉด, ํด๋น ๋ ธ๋์ ์์ ๋ ธ๋๋ค์ ํ์ ํ ์์๋ก ๋ฃ์ด์ค๋๋ค.
- ๋ฐฉ๋ฌธํด์ผ ํ๋ ๋ ธ๋๊ฐ ์์ด์ง ๋ ๊น์ง 3-4 ๊ณผ์ ์ ๋ฐ๋ณตํด์ค๋๋ค.
์๋ฐ์คํฌ๋ฆฝํธ๋ก DFS ๊ตฌํํ๊ธฐ
const BFS = (graph, firstNode) => {
const visited = [];
let needVisit = [];
needVisit.push(firstNode);
while (!!needVisit.length) {
const node = needVisit.shift();
if (!visited.includes(node)) {
visited.push(node);
needVisit = [...needVisit, ...graph[node]];
}
}
return visited;
};
DFS (๊น์ด ์ฐ์ ์ํ)
DFS๋?
DFS๋ Depth-First-Search์ ์ค์๋ง์ ๋๋ค.
ํธ๋ฆฌ๋ฅผ ์ํํ ๋ ๊น์ด๋ฅผ ์ฐ์ ํ์ฌ ์ํํ๋ ์๊ณ ๋ฆฌ์ฆ์ ์๋ฏธํฉ๋๋ค. ์ฆ ํ์ฌ ๋ ธ๋์ ํ์ ๋ ธ๋๋ณด๋ค ์์ ๋ ธ๋๋ฅผ ์ฐ์ ํ์ฌ ํ์ํฉ๋๋ค.
๋ค์๊ณผ ๊ฐ์ ํธ๋ฆฌ (๊ทธ๋ํ) ๊ฐ ์์ ๋,
DFS๋ฅผ ์ด์ฉํ ์ํ ์์๋ ํด๋น ๊ทธ๋ฆผ๊ณผ ๊ฐ์ต๋๋ค.
![](https://blog.kakaocdn.net/dn/T8Ejw/btsjO8yptRy/RYnTvi2Qts8N2fqSt6H6hk/img.png)
DFS ๊ตฌํ ๋ก์ง
DFS์ ๊ตฌํํ๊ธฐ์ํ ๋ก์ง์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- ๋ฐฉ๋ฌธํ ๋ ธ๋๋ค์ ๊ธฐ์ตํ ๋ฐฐ์ด์ ์์ฑํด ์ค๋๋ค.
- ๋ฐฉ๋ฌธํด์ผ ํ๋ ๋ ธ๋๋ฅผ ๊ธฐ์ตํ ํ๋ฅผ ์์ฑํด ์ค๋๋ค.
- ๋ฐฉ๋ฌธํด์ผํ๋ ๋ ธ๋(= ํ์ ๊ธธ์ด)๊ฐ ์กด์ฌํ๋ ํ ํ์์ ๋ค์ ๋ฐฉ๋ฌธํ ๋ ธ๋๋ฅผ ๋ฝ์ ์ค๋๋ค.
- ๋ฝ์ ๋ ธ๋๊ฐ ์ด๋ฏธ ๋ฐฉ๋ฌธํ๋ ๋ ธ๋๊ฐ ์๋๋ผ๋ฉด, ํด๋น ๋ ธ๋์ ์์ ๋ ธ๋๋ค์ ํ์ ์ฐ์ ์์๋ก ๋ฃ์ด์ค๋๋ค.
- ๋ฐฉ๋ฌธํด์ผ ํ๋ ๋ ธ๋๊ฐ ์์ด์ง ๋ ๊น์ง 3-4 ๊ณผ์ ์ ๋ฐ๋ณตํด์ค๋๋ค.
์๋ฐ์คํฌ๋ฆฝํธ๋ก DFS ๊ตฌํํ๊ธฐ
const DFS = (graph, firstNode) => {
const visited = [];
let needVisit = [];
needVisit.push(firstNode);
while (!!needVisit.length) {
const node = needVisit.shift();
if (!visited.includes(node)) {
visited.push(node);
needVisit = [...graph[node], ...needVisit];
}
}
return visited;
};
'Algorithm' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[ํ๋ก๊ทธ๋๋จธ์ค] ํฐ ์ ๋ง๋ค๊ธฐ (0) | 2023.06.14 |
---|---|
[ํ๋ก๊ทธ๋๋จธ์ค] ์ ๋ ฅ๋ง์ ๋๋ก ๋๋๊ธฐ (2) | 2023.06.13 |
๋กค์ผ์ดํฌ ์๋ฅด๊ธฐ (0) | 2023.05.19 |
๋ค์ ์๋ ํฐ ์ ์ฐพ๊ธฐ (0) | 2023.05.17 |
[Algoithm] ์ง์์ ํฉ (0) | 2022.12.23 |