DEV_IN/Algorithm
์๋ฃ๊ตฌ์กฐ/๊ทธ๋ํ/BFS
๋ค๋น์น์ฝ๋๐
2023. 3. 21. 14:21
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"]