let's get IT with DAVINA ๐ป
์๋ฃ๊ตฌ์กฐ/๊ทธ๋ํ/BFS ๋ณธ๋ฌธ
BFS(Breadth First Search)
๋ค์ฐจ์ ๋ฐฐ์ด์์ ๊ฐ ์นธ์ ๋ฐฉ๋ฌธํ ๋ ๋๋น๋ฅผ ์ฐ์ ์ผ๋ก ๋ฐฉ๋ฌธํ๋ ์๊ณ ๋ฆฌ์ฆ
1. ์์ํ๋ ์นธ์ ํ์ ๋ฃ๊ณ ๋ฐฉ๋ฌธํ๋ค๋ ํ์๋ฅผ ๋จ๊น
2. ํ์์ ์์๋ฅผ ๊บผ๋ด์ด ๊ทธ ์นธ์ ์ํ์ข์ฐ๋ก ์ธ์ ํ ์นธ์ ๋ํด 3๋ฒ์ ์งํ
3. ํด๋น ์นธ์ ์ด์ ์ ๋ฐฉ๋ฌธํ๋ค๋ฉด ์๋ฌด๊ฒ๋ ํ์ง ์๊ณ , ์ฒ์์ผ๋ก ๋ฐฉ๋ฌธํ๋ค๋ฉด ๋ฐฉ๋ฌธํ๋ค๋ ํ์๋ฅผ ๋จ๊ธฐ๊ณ ํด๋น ์นธ์ ํ์ ์ฝ์
4. ํ๊ฐ ๋น ๋๊น์ง 2๋ฒ์ ๋ฐ๋ณต
๋ชจ๋ ์นธ์ด ํ์ 1๋ฒ์ฉ ๋ค์ด๊ฐ๋ฏ๋ก ์๊ฐ๋ณต์ก๋๋ ์นธ์ด N๊ฐ์ผ ๋ O(N)
์ด ๋, x๊ฐ ํ & y๊ฐ ์ด
๊ตฌํ
const graph = {
A: ["B", "C"],
B: ["A", "D"],
C: ["A", "G", "H", "I"],
D: ["B", "E", "F"],
E: ["D"],
F: ["D"],
G: ["C"],
H: ["C"],
I: ["C", "J"],
J: ["I"]
};
const BFS = (graph, startNode) => {
const visited = []; // ํ์์ ๋ง์น ๋
ธ๋๋ค
let willVisit = []; // ํ์ํด์ผํ ๋
ธ๋๋ค
willVisit.push(startNode); // ๋
ธ๋ ํ์ ์์
while (willVisit.length !== 0) { // ํ์ํด์ผํ ๋
ธ๋๊ฐ ๋จ์์๋ค๋ฉด
const node = willVisit.shift(); // queue์ด๊ธฐ ๋๋ฌธ์ ์ ์
์ ์ถ, shift()๋ฅผ ์ฌ์ฉํ๋ค.
if (!visited.includes(node)) { // ํด๋น ๋
ธ๋๊ฐ ํ์๋ ์ ์๋ค๋ฉด
visited.push(node);
willVisit = [...willVisit, ...graph[node]];
}
}
return visited;
};
console.log(BFS(graph, "A"));
// ["A", "B", "C", "D", "G", "H", "I", "E", "F", "J"]
'DEV_IN > Algorithm' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[์๋ฃ๊ตฌ์กฐ/์ ํ๊ตฌ์กฐ] ๋ฑ (0) | 2023.03.09 |
---|---|
[์๋ฃ๊ตฌ์กฐ/์ ํ๊ตฌ์กฐ] ์ฐ๊ฒฐ ๋ฆฌ์คํธ (0) | 2023.03.08 |
[์๋ฃ๊ตฌ์กฐ/์ ํ๊ตฌ์กฐ] ๋ฐฐ์ด (0) | 2023.03.08 |
[์๊ณ ๋ฆฌ์ฆ ์ ํ] Greedy Algorithm (2) | 2023.03.07 |
์๊ณ ๋ฆฌ์ฆ/๊ณต๊ฐ ๋ณต์ก๋ (2) | 2023.02.24 |
Comments