μΌ | μ | ν | μ | λͺ© | κΈ | ν |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- position
- μ½λ©ν μ€νΈ
- νλ‘ νΈμλ
- μλ°μ€ν¬λ¦½νΈ
- μκ³ λ¦¬μ¦
- fetch API
- CSS
- Flex
- float
- history api
- Props
- Gatsby
- λ°λΈμ½μ€3κΈ°
- REACT
- νλ‘κ·Έλλ¨Έμ€
- λΈλ‘κ·Έ
- useRef
- λ°λΈμ½μ€
- useEffect
- Today
- Total
Daehyunii's Dev-blog
17 νΈλ¦¬ μν λ³Έλ¬Έ
17 νΈλ¦¬ μν
Daehyunii 2022. 8. 16. 20:1617.1 νΈλ¦¬ μν
νΈλ¦¬ μνλ λ§ κ·Έλλ‘ μ΄λ€ νΈλ¦¬μμλ μ§ μ¬μ©ν μ μλ κ°λ μ΄λ€. μλ₯Ό λ€μ΄ μ΄μ§ νμ νΈλ¦¬λ μ§, κ·Έλ₯ μ΄μ§ νΈλ¦¬λ μ§ κ·Έ μΈμ μ΄λ€ νΈλ¦¬λ€μλ λ€ μ¬μ©μ΄ κ°λ₯ν μν λ°©λ²μ΄λ€. μ¦ νΈλ¦¬μ νΉμ±μ κ°μ§κ³ μλ€λ©΄ νΈλ¦¬ μνλ₯Ό ν μ μλ€. νΈλ¦¬λ₯Ό μννλ λ°©λ²μλ λ§μ λ°©λ²μ΄ μ‘΄μ¬νκ³ λνμ μΌλ‘ λλΉ μ°μ νμ(Breadth First Search)κ³Ό κΉμ΄ μ°μ νμ(Deapth First Search)κ° μλ€. μ΄λ€ νμ λ°©λ²μ΄λ λͺ¨λ λ Έλλ€μ μννλ κ²μ λμΌνλ€.
17.2 λλΉ μ°μ νμ
λλΉ μ°μ νμ(Breadth First Search)μ νΈλ¦¬μ κ°μ λ 벨μ μλ λͺ¨λ λ Έλλ₯Ό κ±°μ³κ°λ©° μνλ₯Ό νλ λ°©μμ΄λ€.
/*
νΈλ¦¬)
10
/ \
6 15
/ \ / \
3 8 12 20
λλΉ μ°μ νμ) κ°μ λ 벨μ λ
Έλλ€μ κ±°μ³κ°λ©΄μ νμ
------>10
--->6----------->15
3----->8----->12----->20
*/
λλΉ μ°μ νμμ ꡬννλ €λ©΄ ν μλ£ κ΅¬μ‘°λ₯Ό μ΄μ©ν΄μΌ νλ€.(μ μ μ μΆ) μ§μ ν ν΄λμ€λ₯Ό λ§λ€μ΄μ νμ©νλ κ²λ³΄λ€ λ°°μ΄μ νμ©ν΄μ νλ₯Ό λ§λλ κ²μ΄ ꡬννκΈ° λ νΈλ¦¬νλ€.
βμλμ½λ
1) λ¨Όμ λ³μ λ κ°λ₯Ό λ§λ λ€.
2) νλ₯Ό λ§λ€μ΄μ μμλ€μ μΆμ νκ³ , λ°μ΄ν°λ₯Ό λ΄λ λ°°μ΄μ λ§λ€μ΄μ λ§μ§λ§μ λ°νν΄ μ€λ€.
μ¦, λ§μ§λ§μ λ°μ΄ν°λ₯Ό λ΄μ λ°°μ΄μ λ°ννκ³ , νλ λ§μ§λ§μλ λΉμ΄ μλ λ°°μ΄ μνκ° λλ€.(ν λ°°μ΄μ κ·Έλ₯ λμμ£Όλ μν μ)
3) μ²μμλ λ£¨νΈ λ Έλλ₯Ό ν λ°°μ΄μ λ£κ³ , ν λ°°μ΄μ λ°μ΄ν°κ° μλ€λ©΄ κ³μ 루νλ₯Ό λλ¦°λ€.
4) κ·Έλ¦¬κ³ νμμ λνλ₯Ό νλ€. λ°°μ΄μ μ¬μ©ν΄μ λ§λλ κ²½μ°μλ shift() λ©μλλ₯Ό μ¬μ©ν΄μ ν λ°°μ΄μ 맨 μμ μλ λ°μ΄ν°λ₯Ό μ κ±° νλ€.
5) κ·Έλ¦¬κ³ μ κ±°ν λ Έλμ κ°μ λ°μ΄ν°λ₯Ό λ΄λ λ°°μ΄μ μΆκ°ν΄ μ€λ€.
6) κ·Έλ¦¬κ³ μ κ±°λ λ Έλμ μΌμͺ½/μ€λ₯Έμͺ½μ λ Έλκ° μλμ§ νμΈνκ³ λ Έλκ° μλ€λ©΄ ν΄λΉ λ Έλλ₯Ό ν λ°°μ΄μ λ΄λλ€.
7) λͺ¨λ 루νκ° λλ λ€μμλ λͺ¨λ λ Έλμ κ°λ€μ μ μ₯ν λ³μλ₯Ό μΆλ ₯ν΄ μ€λ€.
class Node {
constructor(value){
this.value = value;
this.left = null;
this.right = null;
}
}
class BinarySearchTree {
constructor(){
this.root = null;
}
insert(value){
var newNode = new Node(value);
if(this.root === null){
this.root = newNode;
return this;
}
var current = this.root;
while(true){
if(value === current.value) return undefined;
if(value < current.value){
if(current.left === null){
current.left = newNode;
return this;
}
current = current.left;
} else {
if(current.right === null){
current.right = newNode;
return this;
}
current = current.right;
}
}
}
find(value){
if(this.root === null) return false;
var current = this.root,
found = false;
while(current && !found){
if(value < current.value){
current = current.left;
} else if(value > current.value){
current = current.right;
} else {
found = true;
}
}
if(!found) return undefined;
return current;
}
BFS(){
var node = this.root,
data = [],
queue = [];
queue.push(node);
while(queue.length){ //λΉ λ°°μ΄μ 무쑰건 trueκ° λμμ lengthλ₯Ό μ΄μ©
node = queue.shift(); // shift μλ³Έ λ°°μ΄ μ§μ λ³κ²½(ν λ°°μ΄μμ μ κ±°λ¨)
data.push(node.value); // push μλ³Έ λ°°μ΄ μ§μ λ³κ²½(λ°μ΄ν λ°°μ΄μ μΆκ°λ¨)
if(node.left) queue.push(node.left);
if(node.right) queue.push(node.right);
}
return data;
}
}
17.3 κΉμ΄ μ°μ νμ
κΉμ΄ μ°μ νμμ λλΉ μ°μ νμ μ²λΌ νμ λ Έλλ₯Ό λ€ κ±°μ³κ°λ©΄μ νμνλ κ²μ΄ μλλΌ, μμ§μΌλ‘ νΈλ¦¬μ λκΉμ§ λ΄λ €κ°λ©΄μ κ²μνλ κ²μ΄λ€. κΉμ΄ μ°μ νμμ μνμ μνλ λ°μ΄ν°λ₯Ό μ μ₯νλ λ°°μ΄μ μΈμ μνλ λ°μ΄ν°λ₯Ό μ μ₯ν μ§μ λ°λΌ μ μ μν, νμ μν, μ€μ μνλ‘ λλ μ μλ€.
βμλμ½λ
1) μνμ νμΈμ ν λ Έλλ€μ κ°μ μ μ₯νλ λ°°μ΄μ λ§λ λ€.
2) 맨 λ§μ§λ§μλ κ°μ μ μ₯ν λ°°μ΄μ λ°ννλ€.
3) νμ¬ νμΈνκ³ μλ λ Έλλ₯Ό κ°λ¦¬ν€λ ν¬μΈν° μν μ ν λ³μλ₯Ό λ§λ€μ΄ μ€λ€. κ·Έλ¦¬κ³ νΈλ¦¬μ 루νΈλ Έλλ₯Ό ν λΉνλ€.
4) μ΄μ ν¬νΌ ν¨μμΈ μ€μ²© ν¨μλ₯Ό λ§λ λ€.
5) μ΄μ λ Έλλ€μ λ°©λ¬Έν΄μ λ Έλλ€μ κ°μ μ μ₯νλ λ°°μ΄μ κ°μ μΆκ°ν΄ μ€λ€.
6) κ·Έλ¦¬κ³ νμΈν λ Έλκ° μΌμͺ½/μ€λ₯Έμͺ½ νλ‘νΌν°μ λ Έλλ₯Ό κ°μ§κ³ μλ€λ©΄ μ¬κ· λ°©μμΌλ‘ ν¬νΌ ν¨μλ₯Ό λ€μ νΈμΆν©λλ€.
class Node {
constructor(value){
this.value = value;
this.left = null;
this.right = null;
}
}
class BinarySearchTree {
constructor(){
this.root = null;
}
insert(value){
var newNode = new Node(value);
if(this.root === null){
this.root = newNode;
return this;
}
var current = this.root;
while(true){
if(value === current.value) return undefined;
if(value < current.value){
if(current.left === null){
current.left = newNode;
return this;
}
current = current.left;
} else {
if(current.right === null){
current.right = newNode;
return this;
}
current = current.right;
}
}
}
find(value){
if(this.root === null) return false;
var current = this.root,
found = false;
while(current && !found){
if(value < current.value){
current = current.left;
} else if(value > current.value){
current = current.right;
} else {
found = true;
}
}
if(!found) return undefined;
return current;
}
DFSPreOrder(){ //μ μ
var data = [];
function traverse(node){
data.push(node.value); // <--ν΄λΉ μ½λμ μμΉμ λ°λΌ dfsμ μ νμ΄ λ¬λΌμ§λ€.
if(node.left) traverse(node.left);
if(node.right) traverse(node.right);
}
traverse(this.root);
return data;
}
DFSPostOrder(){ //νμ
var data = [];
function traverse(node){
if(node.left) traverse(node.left);
if(node.right) traverse(node.right);
data.push(node.value); // <--ν΄λΉ μ½λμ μμΉμ λ°λΌ dfsμ μ νμ΄ λ¬λΌμ§λ€.
}
traverse(this.root);
return data;
}
DFSInOrder(){ //μ€μ
var data = [];
function traverse(node){
if(node.left) traverse(node.left);
data.push(node.value); // <--ν΄λΉ μ½λμ μμΉμ λ°λΌ dfsμ μ νμ΄ λ¬λΌμ§λ€.
if(node.right) traverse(node.right);
}
traverse(this.root);
return data;
}
}
κ·Έλ λ€λ©΄ λλΉ μ°μ νμ, κΉμ΄ μ°μ νμμ μΈμ μ¬μ©νλ©΄ μ’μκΉ? μ°μ νΈλ¦¬μ λλΉκ° λμ κ²½μ°μλ κΉμ΄ μ°μ νμ λ°©λ²μ΄ λ μ 리νλ€. μλνλ©΄ λλΉ μ°μ νμμ νμ μ μ₯ν΄μ κ·Έκ²μ νμ©νλ λ°©μμΌλ‘ μ΄λ€μ§κΈ° λλ¬Έμ λμ΄κ° λμ΄ μ§μλ‘ λ§μ λ°μ΄ν°λ₯Ό νμ μ μ₯ν΄μΌ νλ―λ‘ κ³΅κ° λ³΅μ‘λκ° μ¬λΌκ°κΈ° λλ¬Έμ΄λ€. λ°λλ‘ νΈλ¦¬μ κΉμ΄κ° κΉμ κ²½μ°μλ λλΉ μ°μ νμ λ°©λ²μ΄ μ 리νλ€. κΉμ΄ μ°μ νμμ ν¬νΌ ν¨μκ° μ¬κ· νΈμΆλλλ° κΉμ΄κ° κΉμ΄μ§λ©΄ κ·Έ λ§νΌ μ½ μ€νμ΄ κ³μν΄μ μμ΄κΈ° λλ¬Έμ΄λ€.
'π Language & CS knowledge > Algorithm & Data structure' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
19 ν΄μ ν μ΄λΈ (0) | 2022.08.16 |
---|---|
18 μ΄μ§ ν (0) | 2022.08.16 |
16 μ΄μ§ κ²μ νΈλ¦¬ (0) | 2022.08.14 |
15 μ€ν & ν (0) | 2022.08.14 |
14 μ΄μ€ μ°κ²° 리μ€νΈ (0) | 2022.08.13 |