티스토리 뷰
BFS는 넓이 우선 탐색이다. 넓이를 우선적으로 탐색하는 것인데, 위의 경우 탐색순서가 다음과 같다.
1 -> 2 -> 3 -> 4 -> 5 -> 6 -> 7
숫자를 순서대로 따라가보면 옆으로 나열하듯 탐색하는 것을 알 수 있다.
const store = {
root: {
id: 1,
type: 'dir',
name: 'first dir',
sub: [
{
id: 2,
type: 'dir',
name: 'first dir',
sub: [
{
id: 9,
type: 'dir',
name: 'first dir',
sub: [],
}
],
},
{
id: 8,
type: 'dir',
name: 'first dir',
sub: [
{
id: 4,
type: 'dir',
name: 'first dir',
sub: [],
}
],
}
],
},
};
위와 같은 폴더 구조가 있다고 가정해 보자.
넓이 우선탐색으로 탐색하려면 탐색 id 순서는 다음과 같다. 1 -> 2 -> 8 -> 9 -> 4
const findDepth = (root, id) => {
const queue = [root, 'level'];
let levelCount = 0;
while (queue.length !== 1) {
const firstNode = queue.shift();
if (firstNode.id === id) {
break;
}
if (firstNode === 'level') {
levelCount += 1;
queue.push('level');
}
if (firstNode !== 'level') {
queue.push(...firstNode.sub);
}
if (queue.length === 1 && firstNode.id !== id) {
return -1;
}
}
return levelCount;
};
위 코드를 짜면서 깊이를 어떻게 지정해 주는 지 생각해내는 것이 관건이었다.
깊이는 flag를 주어 풀면된다.
1, flag, 2, 8, flag, 9, 4
flag를 넣어주어 flag를 만날때마다 levelCount를 하나씩 올려주면 된다.
'Algorithm' 카테고리의 다른 글
Container With Most Water Javascript (0) | 2022.10.05 |
---|---|
1221. Split a String in Balanced Strings In JavaScript [탐욕법] (0) | 2021.12.28 |
LeetCode - 653. Two Sum IV - Input is a BST in Javascript (0) | 2021.11.26 |
LeetCode - Minimum Absolute Difference in BST in JavaScript (0) | 2021.11.25 |
LeetCode - Lowest Common Ancestor of a Binary Search Tree in JavaScript (0) | 2021.11.24 |
댓글