์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
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 |
- ๋ฐ๋ธ์ฝ์ค3๊ธฐ
- ์๊ณ ๋ฆฌ์ฆ
- float
- ์ฝ๋ฉํ ์คํธ
- fetch API
- CSS
- ํ๋ก๊ทธ๋๋จธ์ค
- ํ๋ก ํธ์๋
- history api
- ๋ธ๋ก๊ทธ
- useRef
- position
- Flex
- ์๋ฐ์คํฌ๋ฆฝํธ
- ๋ฐ๋ธ์ฝ์ค
- Gatsby
- REACT
- Props
- useEffect
- Today
- Total
Daehyunii's Dev-blog
20 ๊ทธ๋ํ ๋ณธ๋ฌธ
20.1 ๊ทธ๋ํ
๊ทธ๋ํ๋ ์ ํํ๊ณ ๋ณํ ์ ์๋ ๊ผญ์ง์ (๋ ธ๋)์ ์งํฉ์ผ๋ก ๊ตฌ์ฑ๋ ๋ฐ์ดํฐ ๊ตฌ์กฐ์ด๋ค. ์ด ๊ผญ์ง์ ๋ค์ ์งํฉ์ ์์๊ฐ ์๋ ๊ฒฝ์ฐ์๋ ๋ฌด๋ฐฉํฅ ๊ทธ๋ํ, ์์๊ฐ ์๋ ๊ฒฝ์ฐ์๋ ์ ๋ฐฉํฅ ๊ทธ๋ํ๋ผ๊ณ ํ๋ค. ์ฆ, ๊ทธ๋ํ๋ ๋ ธ๋์ ๋ ธ๋๋ค์ ์ฐ๊ฒฐ์ ๋ชจ์ ๊ฒ์ด๋ค. ๊ทธ๋ฌ๋ฏ๋ก ํธ๋ฆฌ๋ ๊ทธ๋ํ์ ์ผ์ข ์ด๋ค. ๋ค๋ง ํธ๋ฆฌ๋ ๋ช ๊ฐ์ง ๊ท์น์ด ์ถ๊ฐ๋์ด ๋ถ๋ชจ์ ์์๋ ธ๋๋ก ๊ตฌ์ฑ๋๊ณ ์์์ ์ธ ๋ฃจํธ๊ฐ ์กด์ฌํ๋ ๊ฒ์ด๋ค. ํ์ง๋ง ๊ทธ๋ํ์๋ ๋ถ๋ชจ ๋ ธ๋๋ผ๋ ๊ฒ์ด ์๊ณ , ์์์ ๋ ์๋ค. ๋ค ๋์ผํ ๋ ธ๋์ผ ๋ฟ์ด๋ค. ๋ํ ๊ทธ๋ํ๋ ํธ๋ฆฌ๋ ์ฐ๊ฒฐ ๋ฆฌ์คํธ ๊ฐ์ ์์ค์ ํจํด์ด ์๋ค. ์์ ๋ก์ด ํ์์ ๋ ธ๋๊ฐ ์๊ณ ๊ทธ ์ฌ์ด์ ์ฐ๊ฒฐ๋ง ์์ ๋ฟ์ด๋ค. ๋ํ ํธ๋ฆฌ๋ ํ ๋ ธ๋์์ ๋ค๋ฅธ ๋ ธ๋๋ก ๊ฐ๋ ๊ฒฝ๋ก๊ฐ ๋ฑ ํ ๊ฐ์ง๋ง ์กด์ฌํด์ผ ํ์ง๋ง ๊ทธ๋ํ๋ ์ ๊ฐ์ ๊ฒฝ๋ก๊ฐ ์กด์ฌํ ์ ์๋ค.
โป์ฉ์ด ์ ๋ฆฌ
1) ์ ์ (Vertex) : ๋ ธ๋๋ฅผ ์๋ฏธํจ
2) ๊ฐ์ (Edge) : ๋ ธ๋์ ๋ ธ๋ ์ฌ์ด์ ์ฐ๊ฒฐ์ ์๋ฏธํจ
3) ๊ฐ์ค(Weighted) : ๊ฐ์ ์ ๊ฐ์ ๋ถ์ฌํ ๊ฒ(์ฐ๊ฒฐ ๊ทธ ์์ฒด์ ์ ๋ณด๊ฐ ๋ด๊ฒจ์๋ ๊ฒ์ด๋ค.)
4) ๋น๊ฐ์ค(Unweighted) : ๊ฐ์ ์ ๊ฐ์ ๋ถ์ฌํ์ง ์์ ๊ฒ
5) ๋ฐฉํฅ(Directed) : ๊ฐ์ ์ด ๋จ๋ฐฉํฅ์ผ๋ก ์ฐ๊ฒฐ๋์ด ์๋ ๊ฒ
6) ๋ฌด๋ฐฉํฅ(Undirected) : ๊ฐ์ ์ ์กด์ฌํ๋ ๋ฐฉํฅ์ฑ์ด ์์
20.2 ๊ทธ๋ํ ์ ๋ ฌ : ์ธ์ ํ๋ ฌ vs ์ธ์ ๋ฆฌ์คํธ
๊ทธ๋ํ์ ์ ๋ณด๋ฅผ ์ ์ฅํ๊ณ ์ฐ๊ฒฐํ๋ ๋ฐฉ๋ฒ์๋ ์ฌ๋ฌ๊ฐ์ง๊ฐ ์๋๋ฐ ๋ํ์ ์ธ ๋ฐฉ๋ฒ์ผ๋ก ์ธ์ ํ๋ ฌ(Adjacency Matrix)์ ์ธ์ ๋ฆฌ์คํธ(Adjacency Lists)๊ฐ ์๋ค.
1) ์ธ์ ํ๋ ฌ(Adjacency Matrix)
ํ๋ ฌ์ด๋ ์ด์ฐจ์ ๊ตฌ์กฐ๋ก ํญ์์ ์๋์ง๋ง ๋ณดํต ์ค์ฒฉ ํ๋ ฌ๋ก ํํํ๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก ํ๊ณผ ์ด์ ๋ง์ถฐ์ ์ ๋ณด๋ฅผ ์ ์ฅํ๋ ๋ฐฉ๋ฒ์ด๋ค.
์ฅ์ : ํน์ ๊ฐ์ ์ ํ์ธํ๋ ๊ฒฝ์ฐ์ ๋น ๋ฅด๋ค.
๋จ์ : ์ธ์ ๋ฆฌ์คํธ์ ๋นํด ๊ณต๊ฐ์ ๋ ๋ง์ด ์ฐจ์งํ๊ณ , ๋ชจ๋ ๊ฐ์ ์ ์ํํด์ผ ํ๋ ๊ฒฝ์ฐ ๋๋ฆฌ๋ค.(๋ฐ์ดํฐ๊ฐ ๋๊ฒ ํผ์ ธ์๋ ๊ฒฝ์ฐ ์ข์ง ์๋ค.)
2) ์ธ์ ๋ฆฌ์คํธ(Adjacency Lists)
์ ์ ์ด ์ซ์๋ก ์ด๋ค์ง ๊ฒฝ์ฐ์๋ ๋ฐฐ์ด์ ํตํด์ ๊ฐ์ ๋ค์ ์ ์ฅํ ์ ์๊ณ , ํน์ ๋ฌธ์์ด์ด๋ ์ซ์๊ฐ ์๋ ๊ฒฝ์ฐ ํด์ํ ์ด๋ธ ์๋ฃ๊ตฌ์กฐ๋ฅผ ํตํด ๊ฐ์ ๋ค์ ์ ์ฅํ ์ ์๋ค.(ํค์ ๊ฐ์ ์์ผ๋ก ์ ์ฅํ๋ ๋ฐ์ดํฐ ๊ตฌ์กฐ)
์ฅ์ : ์ธ์ ํ๋ ฌ์ ๋นํด ๊ณต๊ฐ์ ์ ๊ฒ ์ฐจ์งํ๊ณ ๋ชจ๋ ๊ฐ์ ์ ์ํํ๋ ๊ฒฝ์ฐ ๋น ๋ฅด๋ค.
๋จ์ : ํน์ ๊ฐ์ ์ด ์กด์ฌํ๋์ง ํ์ธํ๋ ๊ฒ์ ๋๋ฆฌ๋ค.
//๋
ธ๋๊ฐ ์ซ์๋ก ์ด๋ค์ง ๊ฒฝ์ฐ ์ธ๋ฑ์ค๋ฅผ ์ ์ ์ผ๋ก ํํํ๊ณ ํด๋น ์ ์ ์ ๊ฐ์ ๋ค์ ๋ฐฐ์ด๋ก ํ์
[[1,5],[0,2],[1,3],[2,4],[3,5],[4,0]]
//๋
ธ๋๊ฐ ์ซ์๋ก ์ด๋ค์ง์ง ์์ ๊ฒฝ์ฐ
{
A: ["B", "F"],
B: ["A", "C"],
C: ["B", "D"],
D: ["C", "E"],
E: ["D", "F"],
F: ["E", "A"]
}
20.3 ์ ์ ์ถ๊ฐ
์ธ์๋ฅผ ๋ฐ์์ ์ธ์ ๋ฆฌ์คํธ์ ํ๋กํผํฐ๋ก ์ถ๊ฐํ๋ค. ์ ์ ์ ์ด๋ฆ์ ์ธ์ ๋ฆฌ์คํธ์ ํค๋ก ๋ง๋ค๊ณ ๊ฐ์ ๊ฐ์ ๋ค์ ๋ฃ์ด์ฃผ๋ฉด ๋๋ค.(๊ฐ์ ์ด๊ธฐ ์ค์ ์ ๋น ๋ฐฐ์ด๋ก ๋ง๋ค์ด์ฃผ๋ฉด ๋๋ค.)
// ์ธ์ ๋ฆฌ์คํธ๋ฅผ ํ์ฉ
class Graph{
constructor(){
this.adjacencyList = {};
}
addVertex(vertex){
if(!this.adjacencyList[vertex]) this.adjacencyList[vertex] = [];
}
}
20.4 ๊ฐ์ ์ถ๊ฐ
๊ฐ์ ์ ์ถ๊ฐํ ๋๋ ๋ ๊ฐ์ ์ ์ ์ ๋ชจ๋ ๋ช ์ํ์ฌ์ผ ํ๋ค.(๋ฌด๋ฐฉํฅ ๊ทธ๋ํ์ ๊ฒฝ์ฐ)
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);
}
}
20.5 ๊ฐ์ ์ ๊ฑฐ
์ ์ ์ ์ ๊ฑฐํ๊ธฐ ์ํด์๋ ์ ์ ๋ ๊ฐ๋ฅผ ์ธ์๋ก ๋ฐ์์ผ ํ๊ณ , ํ๋์ ์ ์ ์ด ๊ฐ๋ฆฌํค๋ ๋ฐฐ์ด์ ๋ค๋ฅธ ํ๋์ ์ ์ ์ ์ ๊ฑฐํ ๋ฐฐ์ด์ ์ฌํ ๋น ํด์ค๋ค. ๊ทธ๋ฆฌ๊ณ ๋๋จธ์ง ์ ์ ์๋ ๋์ผํ ๋ฐฉ๋ฒ์ผ๋ก ์ฌํ ๋น ํด์ค๋ค.
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
);
}
}
//filter() ์ฝ๋ฐฑ ํจ์์ ์กฐ๊ฑด์ ๋ง๋ ์์๋ค๋ง ์ทจํ์ฌ ์๋ก์ด ๋ฐฐ์ด์ ๋ง๋ค์ด ๋ฐํํด์ค
20.6 ์ ์ ์ ๊ฑฐ
์ ์ ์ ์ ๊ฑฐํ๊ธฐ ์ํด์๋ ๋จ์ํ ์ ์ ๋ง์ ์ ๊ฑฐํด์๋ ์๋๊ณ ํด๋น ์ ์ ๊ณผ ์ฐ๊ฒฐ๋์ด ์๋ ๋ค๋ฅธ ์ ์ ๋ค์ ๋ฐฐ์ด ๋ด์์๋ ์ง์์ฃผ์ด์ผ ํ๋ค. ๊ทธ๋ฌ๋ฏ๋ก ๋ฃจํ๋ฅผ ๋๋ฉฐ ๋จผ์ ๊ฐ์ ์ ๊ฑฐ ํจ์๋ฅผ ์ด์ฉํ์ฌ ์ญ์ ํ๋ ค๋ ์ ์ ์ด ๊ฐ์ง๊ณ ์๋ ๊ฐ์ ๋ค์ ๋จผ์ ๋ค ์ ๊ฑฐํด์ฃผ๊ณ ์ ์ ์ ๋ง์ง๋ง์ ์ ๊ฑฐํด์ผ ํ๋ค.
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();
console.log(adjacentVertex);
console.log(this.adjacencyList[vertex]);
//์๋ณธ ๋ฐฐ์ด ๋ณ๊ฒฝ๋จ, pop๋ฉ์๋๋ ๋ฐฐ์ด์ ๋งจ ๋ค ์์๋ฅผ ์ง์ฐ๊ณ ์ง์ด ์์๋ฅผ ๋ฐํํจ
this.removeEdge(vertex, adjacentVertex);
}
delete this.adjacencyList[vertex]
}
}
'๐ Language & CS knowledge > Algorithm & Data structure' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
23 ๋์ ํ๋ก๊ทธ๋๋ฐ (0) | 2022.08.21 |
---|---|
21 ๊ทธ๋ํ ์ํ (0) | 2022.08.19 |
19 ํด์ ํ ์ด๋ธ (0) | 2022.08.16 |
18 ์ด์ง ํ (0) | 2022.08.16 |
17 ํธ๋ฆฌ ์ํ (0) | 2022.08.16 |