μΌ | μ | ν | μ | λͺ© | κΈ | ν |
---|---|---|---|---|---|---|
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
- μκ³ λ¦¬μ¦
- REACT
- Gatsby
- float
- μ½λ©ν μ€νΈ
- νλ‘κ·Έλλ¨Έμ€
- μλ°μ€ν¬λ¦½νΈ
- νλ‘ νΈμλ
- useRef
- fetch API
- CSS
- useEffect
- λ°λΈμ½μ€
- Props
- λ°λΈμ½μ€3κΈ°
- history api
- Flex
- λΈλ‘κ·Έ
- Today
- Total
Daehyunii's Dev-blog
21 κ·Έλν μν λ³Έλ¬Έ
21 κ·Έλν μν
Daehyunii 2022. 8. 19. 20:2921.1 κ·Έλν μν
κ·Έλν μνλ λ§ κ·Έλλ‘ λͺ¨λ λ Έλ, μ¦ κ·Έλνμ μλ λͺ¨λ μ μ μ λ€ λ°©λ¬Ένλ€λ λ§μ΄λ€. νΈλ¦¬μ κ²½μ°μλ μ°Ύκ³ μνλ λ Έλμ μ κ·Όνλ κΈΈμ 루νΈμμ μΆλ°ν΄μ λμ°©νλ ν κ°μ§ λ°©λ²λ°μ μλ€. νμ§λ§ νΈλ¦¬μ λ€λ₯΄κ² κ·Έλνλ₯Ό μννλ κ²½μ°μλ 루νΈκ° λ°λ‘ μκΈ° λλ¬Έμ μ½λλ₯Ό ꡬνν λλ μμμ μ μ ν΄μ€μΌ νλ€. λν κ·Έλνμ ν λ Έλμμ λ€λ₯Έ λ Έλλ‘ κ°λ λ°©λ²μ μ μΌν νλμ λ°©λ²λ§ μ‘΄μ¬νλ€λ 보μ₯μ΄ μλ€.
22.2 κΉμ΄ μ°μ κ·Έλν μν(DFS)
μμ λ°°μ΄ μ΄μ§ νμ νΈλ¦¬μ DFSμ λμΌν κ°λ μ΄λ€. νμ§λ§ κ·Έλνμμλ 루νΈκ° μκΈ° λλ¬Έμ νλμ μ μ μ μ§μ νκ³ μμν΄μΌ νλ€. κ·Έλ¦¬κ³ κ·Έλνμμμ κΉμ΄ μ°μ κ·Έλν μνλ ν μΈμ μ μ μ°Ύκ³ μ΄μ΄μ μΈμ μ μ λ μ°Ύλλ€λ μλ―Έμ΄λ€. λ€μ λ§ν΄ ν λ² λ°©λ¬Ένλ κ³³μ μ μΈν κ°μ μ ν΅ν΄ λ€λ₯Έ μ°κ²°λ μ μ μΌλ‘ κΈΈμ΄ λ§ν λκΉμ§ μ΄λνλ κ²μ΄λ€. κ·Έλ κΈ° λλ¬Έμ κΉμ΄ μ°μ κ·Έλν μνλ μ¬κ·νμΌλ‘ λ§λ€κΈ°λ νκ³ , λ°λ³΅νμΌλ‘ λ§λ€κΈ°λ νλ€. κ·Έλνλ μνμ λ°©λ¬Ένλ κ³³μ κΈ°μ΅νλ κ²μ΄ λ§€μ° μ€μνλ€.
βμ¬κ·μ μ©λ² μλμ½λ
1) μμνλ λ Έλλ₯Ό μ λ ₯νλ ν¨μλ₯Ό λ§λ λ€.(루νΈκ° μμΌλ μμν λ Έλλ₯Ό μ§μ μΈμλ‘ λ°μ)
2) λΉ λ°°μ΄μ λ§λ€μ΄μ μ΅μ’ κ²°κ³Όλ₯Ό μ μ₯ν λ³μλ₯Ό λ§λ€κ³ λ§μ§λ§μ μ΄λ₯Ό λ°ννλ€.(κ²°κ³Ό λ°°μ΄)
3) μνν μ μ λ€μ μΆμ ν μ μλ κ°μ²΄λ₯Ό λ§λ€μ΄ μ€λ€.(λ°©λ¬Έ κ°μ²΄)
4) μ μ μ μ λ ₯νλ ν¬νΌ ν¨μλ₯Ό λ§λ λ€.(μ΄ μ€μ²© ν¨μκ° μ¬κ· ν¨μμ)
5) ν¬νΌ ν¨μλ λ°©λ¬Έν μ μ μ λ°©λ¬Έ κ°μ²΄μ λ£μ΄μΌ νλ€.
6) λ°©λ¬Έν μ μ μ λ°©λ¬Έ κ°μ²΄μ λ°©λ¬Ένλ€λ νμλ₯Ό νκ³ κ²°κ³Ό λ°°μ΄μ μΆκ°ν΄ μ€λ€.
7) κ·Έλ¦¬κ³ λλ©΄ ν΄λΉ μ μ μ λͺ¨λ μΈμ μ μ λν 루νλ₯Ό λλ¦°λ€.
8) λ§μ½ λ°©λ¬Ένμ§ μμ μ μ μ΄λΌλ©΄, ν΄λΉ μ μ μ λν΄ ν¬νΌ ν¨μλ₯Ό μ¬κ· λ°©μμΌλ‘ νΈμΆνλ€.
9) λ΄λΆ ν¨μλ κ²°κ³Ό λ°°μ΄κ³Ό λ°©λ¬Έ κ°μ²΄λ₯Ό μ΅μ ννλ©΄μ λ°λ³΅νκ² λλ€.
class Graph{
constructor(){
this.adjacencyList = {};
}
addVertex(vertex){
if(!this.adjacencyList[vertex]) this.adjacencyList[vertex] = [];
}
addEdge(v1,v2){
this.adjacencyList[v1].push(v2);
this.adjacencyList[v2].push(v1);
}
removeEdge(vertex1,vertex2){
this.adjacencyList[vertex1] = this.adjacencyList[vertex1].filter(
v => v !== vertex2
);
this.adjacencyList[vertex2] = this.adjacencyList[vertex2].filter(
v => v !== vertex1
);
}
removeVertex(vertex){
while(this.adjacencyList[vertex].length){
const adjacentVertex = this.adjacencyList[vertex].pop();
this.removeEdge(vertex, adjacentVertex);
}
delete this.adjacencyList[vertex]
}
depthFirstRecursive(start){
const result = []; // μνν μ μ λ€ λͺ¨μλλκ²
const visited = {}; // λ°©λ¬Έν μ μ λ€ νμΈνλκ²
const adjacencyList = this.adjacencyList; // μ΄κ±Έ λ°λ‘ λ§λ€μ΄ μ€μΌ νλ€λκ²μ κΌ κΈ°μ΅νμ
!
//μλ μλ¬λ¨
(function dfs(vertex){
if(!vertex) return null; // μμμ μ μΈμλ‘ μ λ¬νμ§ μμΌλ©΄ nullμ λ°νν΄λΌ
visited[vertex] = true;
result.push(vertex);
adjacencyList[vertex].forEach(neighbor => {
if(!visited[neighbor]){
return dfs(neighbor)
}
});
})(start);
return result;
}
}
//μ μ μμ μμ -> μ μ μ κ°μ λ°°μ΄ λ°λ³΅ -> λ°©λ¬Ένμ μμΌλ©΄ ν΄λΉ μ μ μΌλ‘ μ΄λ -> λ°λ³΅ ->
//μ΄λ -> λ°λ³΅ -> κ²°κ΅ λ€ λ°©λ¬Ένκ² λλ©΄ -> κ·Έ μ μ¬κ·λ‘ -> κ·Έ μ μ¬κ·λ‘ -> κ·Έ μ μ¬κ·λ‘ -> λ°°μ΄ λ°ν
βλ°λ³΅μ μ©λ² μλμ½λ
1) μ€νμΌλ‘ νμ©ν λΉ λ°°μ΄μ λ§λ λ€.
2) μ€νμ μμμ μΌλ‘ νμ©ν μ μ μ λ£λλ€.
3) λ§μ½ μ€νμ΄ λΉ λ°°μ΄μ΄ μνκ° μλλΌλ©΄ 루νλ₯Ό λλ¦°λ€. μ€νμ μ μ μ΄ μλ€λ©΄ ν΄λΉ μ μ μ pop() ν λ€μ λ°©λ¬Έμ νμλμ§ νμΈνλ€.
4) μμ§ λ°©λ¬Ένμ§ μμλ€λ©΄ λ°©λ¬Έ κ°μ²΄μ μΆκ°ν΄ μ€λ€.
5) κ·Έλ¦¬κ³ ν΄λΉ μ μ μ μΈμ μ μ λν΄ λ°λ³΅λ¬Έμ νΈμΆνκ³ μ€νμ μμλ€μ μΆκ°ν΄ μ€λ€.
(μ¬κ·νκ³Ό κ°μ DFS λ°©μμ΄μ§λ§ λ°ννλ κ²°κ³Όμ μμλ λ€λ₯΄λ€.)
class Graph{
constructor(){
this.adjacencyList = {};
}
addVertex(vertex){
if(!this.adjacencyList[vertex]) this.adjacencyList[vertex] = [];
}
addEdge(v1,v2){
this.adjacencyList[v1].push(v2);
this.adjacencyList[v2].push(v1);
}
removeEdge(vertex1,vertex2){
this.adjacencyList[vertex1] = this.adjacencyList[vertex1].filter(
v => v !== vertex2
);
this.adjacencyList[vertex2] = this.adjacencyList[vertex2].filter(
v => v !== vertex1
);
}
removeVertex(vertex){
while(this.adjacencyList[vertex].length){
const adjacentVertex = this.adjacencyList[vertex].pop();
this.removeEdge(vertex, adjacentVertex);
}
delete this.adjacencyList[vertex]
}
depthFirstIterative(start){
const stack = [start];
const result = [];
const visited = {};
let currentVertex;
visited[start] = true; // μ€νμ λ£κΈ°
while(stack.length){
currentVertex = stack.pop(); // μ€νμμ κΊΌλ΄κΈ°
result.push(currentVertex); // κ²°κ³Όμ λ£κΈ°
this.adjacencyList[currentVertex].forEach(neighbor => {
if(!visited[neighbor]){
visited[neighbor] = true; // λ°©λ¬Έλͺ©λ‘μ λ£κΈ°
stack.push(neighbor) // μ€νμ λ£κ³
}
});
}
return result;
}
}
22.3 λλΉ μ°μ κ·Έλν μν(BFS)
λλΉ μ°μ κ·Έλν μνλ μ£Όμ΄μ§ μ μ μ λν΄μ λͺ¨λ μΈμ μ μ λ€ λ°©λ¬Έν λ€μμ μΈμ μ μ μΈμ μ μ λ°©λ¬Ένλ λ°©μμΌλ‘ μννλ€. μ¦, νλμ μ μ μμ μμνκ³ κ·Έ μμνλ μ μ κ³Ό μ°κ²°λμ΄ μλ λͺ¨λ μ μ λ€μ λ€ λ°©λ¬Έν νμ μ μ μ μ μ μΌλ‘ μ΄λνμ¬ κ°μ μμ μ λ°λ³΅ν΄μ μννλ€.
βμλμ½λ
λ°λ³΅ν DFSμ κ±°μ μ μ¬νμ§λ§ λ€λ₯Έ μ μ μ€νμ΄ μλ νλ₯Ό μ¬μ©ν΄μ ꡬννλ κ²μ΄λ€.
1) ν¨μλ μμν μ μ μ μΈμλ‘ λ°κ³ , ν λ°°μ΄μ λ§λ λ€.
2) κ·Έλ¦¬κ³ μμν μ μ μ ν λ°°μ΄μ μΆκ°νλ€.
3) κ·Έλ¦¬κ³ κ²°κ³Όλ‘ λ°νν λ°°μ΄μ λ§λ€μ΄ μνν μ μ λ€μ μΆκ°νκ³ λ§μ§λ§μ λ°νν΄ μ€λ€.(κ²°κ³Ό λ°°μ΄)
4) μ΄λ―Έ λ°©λ¬Έν μ μ λ€μ μ μ₯νκΈ° μν΄ κ°μ²΄λ₯Ό λ§λ€κ³ μμ μ μ μ λ°©λ¬Έν κ²μΌλ‘ νμνλ€.(λ°©λ¬Έ κ°μ²΄)
5) ν μμ μ μ μ΄ λ€μ΄κ° μλν while 루νλ₯Ό ν΅ν΄ λ°λ³΅νκ³ shift λ©μλλ₯Ό ν΅ν΄ λ°°μ΄μ κ°μ₯ μμ μλ λ Έλλ₯Ό λΉΌλΈλ€.
6) κ·Έλ¦¬κ³ κ²°κ³Ό λ°°μ΄μ μΆκ°ν΄ μ€λ€.
7) κ·Έλ¦¬κ³ ν΄λΉ μ μ μ μλ κ° μΈμ μ λ€μ λν΄ μμ§ λ°©λ¬Ένμ§ μμλ€λ©΄ λ°©λ¬Έν κ²μΌλ‘ νμνκ³ νμ μΆκ°ν΄μ€ λ€μ κ²°κ³Ό λ°°μ΄μ νλμ© λΉΌλ΄μ΄ μΆκ°ν΄ μ€λ€.
class Graph{
constructor(){
this.adjacencyList = {};
}
addVertex(vertex){
if(!this.adjacencyList[vertex]) this.adjacencyList[vertex] = [];
}
addEdge(v1,v2){
this.adjacencyList[v1].push(v2);
this.adjacencyList[v2].push(v1);
}
removeEdge(vertex1,vertex2){
this.adjacencyList[vertex1] = this.adjacencyList[vertex1].filter(
v => v !== vertex2
);
this.adjacencyList[vertex2] = this.adjacencyList[vertex2].filter(
v => v !== vertex1
);
}
removeVertex(vertex){
while(this.adjacencyList[vertex].length){
const adjacentVertex = this.adjacencyList[vertex].pop();
this.removeEdge(vertex, adjacentVertex);
}
delete this.adjacencyList[vertex]
}
breadthFirst(start){
const queue = [start];
const result = [];
const visited = {};
let currentVertex;
visited[start] = true;
while(queue.length){
currentVertex = queue.shift();
result.push(currentVertex);
this.adjacencyList[currentVertex].forEach(neighbor => {
if(!visited[neighbor]){
visited[neighbor] = true;
queue.push(neighbor);
}
});
}
return result;
}
}
'π Language & CS knowledge > Algorithm & Data structure' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
23 λμ νλ‘κ·Έλλ° (0) | 2022.08.21 |
---|---|
20 κ·Έλν (0) | 2022.08.17 |
19 ν΄μ ν μ΄λΈ (0) | 2022.08.16 |
18 μ΄μ§ ν (0) | 2022.08.16 |
17 νΈλ¦¬ μν (0) | 2022.08.16 |