| ์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
|---|---|---|---|---|---|---|
| 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 | 31 |
- ์ฝ๋ฉํ ์คํธ
- ์๊ณ ๋ฆฌ์ฆ
- useRef
- fetch API
- ๋ฐ๋ธ์ฝ์ค3๊ธฐ
- ์๋ฐ์คํฌ๋ฆฝํธ
- ๋ธ๋ก๊ทธ
- ํ๋ก๊ทธ๋๋จธ์ค
- Props
- ๋ฐ๋ธ์ฝ์ค
- float
- ํ๋ก ํธ์๋
- REACT
- position
- useEffect
- Flex
- Gatsby
- CSS
- history api
- Today
- Total
Daehyunii's Dev-blog
15 ์คํ & ํ ๋ณธ๋ฌธ
15 ์คํ & ํ
Daehyunii 2022. 8. 14. 15:5415.1 ์คํ(Stack)
์คํ์ด๋ ํ์ ์ ์ถ ์์น์ ๋ฐ๋ฅด๋ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ฅผ ์ผ์ปซ๋ ๋ง์ด๋ค. ์ฆ, ๋์ค์ ๋ค์ด์จ ๋ฐ์ดํฐ๊ฐ ๋จผ์ ์ ๊ฑฐ๋๋ ๋ฐฉ์์ ์๋ฃ ๊ตฌ์กฐ๋ฅผ ์คํ์ด๋ผ๊ณ ๋งํ๋ค. ์ค๊ฑฐ์ง๋ฅผ ํ๊ธฐ ์ํด ์ฑํฌ๋์ ์์ธ ๊ทธ๋ฆ ์ค ๊ฐ์ฅ์์ ์๋ ๊ทธ๋ฆ์ ํ๋์ฉ ์ค๊ฑฐ์งํด ๋๊ฐ๋ค๊ณ ์๊ฐํ๋ฉด ์ฝ๋ค. ์คํ์ ์ฝ๋ฉํ๋ ๋ฐฉ๋ฒ์ ์ฌ๋ฌ๊ฐ์ง๊ฐ ์๊ณ ์ฐ๊ฒฐ ๋ฆฌ์คํธ๋ฅผ ์ฌ์ฉํด์ ๊ตฌํํ ์๋ ์๋ค. ์ฆ, ์คํ์ด๋ผ๋ ๊ฐ๋ ์ ํ์ ์ ์ถ ์์น์ ์งํค๋ ์๋ฃ ๊ตฌ์กฐ๋ค์ ๋งํ๋ ์ถ์์ ์ธ ๊ฐ๋ ์ด๋ค.
15.2 ๋ฐฐ์ด๋ก ์คํ ๊ตฌํํ๊ธฐ
๋ฐฐ์ด์ ๋ง๋ค๊ณ ํด๋น ๋ฐฐ์ด์ ๋ฐ์ดํฐ๋ฅผ ์ถ๊ฐํ ๋ push() ๋ฉ์๋๋ฅผ ํ์ฉํ๊ณ , ์ ๊ฑฐํ ๋ pop() ๋ฉ์๋๋ง์ ์ฌ์ฉํ๊ฑฐ๋ shift(), unshift() ๋ฉ์๋๋ง์ ์ฌ์ฉํ๋ค๋ฉด ๋ฐฐ์ด์ ์คํ์ผ๋ก ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ด ๋๋ค. ํ์ ์ ์ถ ์์น์ ์งํค๊ณ ์๊ธฐ ๋๋ฌธ์ด๋ค. ๋ค๋ง ๋ฐฐ์ด์ ์คํ์ผ๋ก ํ์ฉํ๋ ๊ฒฝ์ฐ์๋ push(),pop() ๋ฉ์๋๋ฅผ ํ์ฉํ๋๊ฒ์ด ๋ ์ข๋ค.(์ธ๋ฑ์ค ๋๋ฌธ์)
var stack = [];
stack.push('a');
stack.push('b');
stack.push('c');
console.log(stack.pop()); // c
console.log(stack.pop()); // b
console.log(stack.pop()); // a
15.3 ๋จ์ผ ์ฐ๊ฒฐ ๋ฆฌ์คํธ๋ก ์คํ ๊ตฌํํ๊ธฐ
์คํ์ ํ์ ์ ์ถ ๊ตฌ์กฐ ์์น์ ์งํค๋ฉด ๋๊ธฐ ๋๋ฌธ์ ๋จ์ผ ์ฐ๊ฒฐ ๋ฆฌ์คํธ๋ก๋ ์คํ์ ๊ตฌํํ ์ ์๋ค. ๋ค๋ง, ๋จ์ผ ์ฐ๊ฒฐ ๋ฆฌ์คํธ๋ฅผ ์คํ์ผ๋ก ๊ตฌํํ๊ธฐ ์ํด์๋ ๋ฐฐ์ด๊ณผ ๋ค๋ฅด๊ฒ shift(), unshift()๋ก ๊ตฌํํ๋๊ฒ์ด ์ข๋ค. ๋จ์ผ ์ฐ๊ฒฐ ๋ฆฌ์คํธ๋ ์ธ๋ฑ์ค๊ฐ ์๊ธฐ ๋๋ฌธ์ ๋ง์ง๋ง์ ๋ ธ๋๋ฅผ ์ ๊ฑฐํ๊ธฐ ์ํด์๋ ํ ์ผ ๋ ธ๋์ ์ง์ ๋ ธ๋๋ฅผ ์ฐพ๊ธฐ์ํด ํค๋ ๋ ธ๋๋ถํฐ ์์ํด์ ์ฐพ์๊ฐ์ผ ํ๋ฏ๋ก O(N) ์๊ฐ ๋ณต์ก๋๋ฅผ ๊ฐ๊ฒ ๋๋ฏ๋ก ์ฐ๊ฒฐ ๋ฆฌ์คํธ์ ๋งจ ์์ ๋ ธ๋๋ฅผ ์ถ๊ฐํ๊ณ ์ ๊ฑฐํ๋ ๋ฐฉ์์ผ๋ก ์คํ์ ๊ตฌํํ๋ ๊ฒ์ด ๋ ํจ์จ์ ์ด๋ค.
class Stack {
constructor(){
this.first = null;
this.last = null;
this.size = 0;
}
unshift(val){ // ๋งจ ์์ ๋
ธ๋ ์ถ๊ฐ
var newNode = new Node(val);
if(!this.first){
this.first = newNode;
this.last = newNode;
} else {
var temp = this.first;
this.first = newNode;
this.first.next = temp;
}
return ++this.size;
}
shift(){ // ๋งจ ์์ ๋
ธ๋ ์ถ๊ฐ
if(!this.first) return null; //๋
ธ๋๊ฐ ์๋์ง ํ์ธ
var temp = this.first;
if(this.first === this.last){ //๋
ธ๋๊ฐ ํ๋์ธ์ง ํ์ธ
this.last = null;
}
this.first = this.first.next; //๊ฐ์ด ํ๋๋ผ๋ฉด ์ ์ด์ next๋ null์ด๋ฏ๋ก
// ์์์๋ ๋
ธ๋๊ฐ ํ๋์ธ์ง ํ์ธํ๋ ๊ณผ์ ์์๋ last๋ง ๋ฐ๊ฟ์ฃผ๋ฉด ๋จ
this.size--;
return temp.value;
}
}
15.4 ํ(Queue)
ํ๋ ์คํ๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ก์ ๋ฐ์ดํฐ๋ฅผ ์ถ๊ฐํ๊ณ ์ ๊ฑฐํ๋ค. ๊ทธ๋ ์ง๋ง ์คํ๊ณผ๋ ๋ค๋ฅด๊ฒ ์ ์ ์ ์ถ ๋ฐฉ์์ด๋ค. ์ฆ, ๋จผ์ ๋ค์ด๊ฐ ๊ฒ์ด ๋จผ์ ๋๊ฒ ๋๋ค. ์๋ฒ๋๋ ์ ์ฅ์ ์ํด ์ค ์ ์๋๊ฒ์ ์๊ฐํ๋ฉด ์ดํดํ๊ธฐ ์ฝ๋ค. ์คํ๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก ๋ฐฐ์ด์ ์ด์ฉํด์ ํ๋ฅผ ๊ตฌํํ ์ ์๊ณ ๋๋ ์์ฒด์ ์ผ๋ก ํ๋ฅผ ๊ตฌํํ ์๋ ์๋ค. ํ์์๋ ๋ณดํต ๋ฐ์ดํฐ๋ฅผ ์ถ๊ฐํ๊ธฐ ์ํด ์ฌ์ฉ๋๋ ํค์๋๋ฅผ enqueue, ๋ฐ์ดํฐ๋ฅผ ์ ๊ฑฐํ๊ธฐ ์ํด ์ฌ์ฉํ๋ ํค์๋๋ฅผ dequeue๋ผ๊ณ ํ๋ค.
โป๋ฐฐ์ด์ ๋ฉ์๋๋ฅผ ์ด์ฉํ์ฌ ์คํ&ํ ๊ตฌํ ์ ๋ฆฌ
| ์คํ(ํ์ ์ ์ถ) | ํ(์ ์ ์ ์ถ) |
| push() & pop() | push() & shift() |
| shift() & unshift() | unshift() & pop() |
15.5 ๋จ์ผ ์ฐ๊ฒฐ ๋ฆฌ์คํธ๋ก ํ ์์ฑํ๊ธฐ
๋จ์ผ ์ฐ๊ฒฐ ๋ฆฌ์คํธ๋ก ํ๋ฅผ ๊ตฌํํ๋ ค๋ฉด ๋ฐฐ์ด์ push() & shift() ๋ฉ์๋์ฒ๋ผ ๊ธฐ๋ฅ์ ๊ตฌํํ๋๊ฒ์ด ์ข๋ค. ์๋ํ๋ฉด ๋จ์ผ ์ฐ๊ฒฐ ๋ฆฌ์คํธ์ ๊ฒฝ์ฐ ๋ค์์ ์ ๊ฑฐ๋ฅผ ํ๋ ค๋ฉด ํค๋ ๋ ธ๋๋ถํฐ ํ๊ณ ๋ค์ด๊ฐ์ผ ํ๋ฏ๋ก ์๊ฐ์ด ์ค๋ ๊ฑธ๋ฆฌ๊ธฐ ๋๋ฌธ์ด๋ค. ํ๋ ์์ฒญ ํฐ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ง๋๋ผ๋ ์๊ด์๋ค. ์ธ๋ฑ์ค๊ฐ ์์ผ๋ฏ๋ก ๋ชจ๋ ๋ช ๋ น์ด ์์๊ฐ์ ๊ฐ์ง๊ฒ ๋๋ฏ๋ก ์ ํ ๋ฌธ์ ๊ฐ ์๋ค. ๊ฐ์ฅ ๋ค์ ๋ฃ๊ณ , ๊ฐ์ฅ ์์์ ์ ๊ฑฐํ๋ฏ๋ก ๋ฐฐ์ด์ด ๊ธธ์ด์ ธ๋ ํญ์ O(1) ์๊ฐ ๋ณต์ก๋๋ฅผ ๊ฐ๋๋ค. ์คํ๊ณผ์ ์ฐจ์ด๋ ํ์ ์ ์ถ์ด๋ ์ ์ ์ ์ถ์ด๋์ ์ฐจ์ด์ด๊ณ ์ฝ๋ ๊ตฌํ ๋ฐฉ์์ ๊ฑฐ์ ๋์ผํ๋ค.
class Node {
constructor(value){
this.value = value;
this.next = null;
}
}
class Queue {
constructor(){
this.first = null;
this.last = null;
this.size = 0;
}
enqueue(val){ //push ์ญํ ์ ํจ
var newNode = new Node(val);
if(!this.first){
this.first = newNode;
this.last = newNode;
} else {
this.last.next = newNode;
this.last = newNode;
}
return ++this.size;
}
dequeue(){ //shift ์ญํ ์ ํจ
if(!this.first) return null; // ๋
ธ๋๊ฐ ์๋ ๊ฒฝ์ฐ ํ์ธ
var temp = this.first;
if(this.first === this.last) { // ๋
ธ๋๊ฐ ํ๊ฐ์ธ ๊ฒฝ์ฐ ํ์ธ
this.last = null;
}
this.first = this.first.next;
this.size--;
return temp.value;
}
}
'๐ Language & CS knowledge > Algorithm & Data structure' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| 17 ํธ๋ฆฌ ์ํ (0) | 2022.08.16 |
|---|---|
| 16 ์ด์ง ๊ฒ์ ํธ๋ฆฌ (0) | 2022.08.14 |
| 14 ์ด์ค ์ฐ๊ฒฐ ๋ฆฌ์คํธ (0) | 2022.08.13 |
| 13 ๋จ์ผ ์ฐ๊ฒฐ ๋ฆฌ์คํธ (0) | 2022.08.12 |
| 11 ํต ์ ๋ ฌ (0) | 2022.08.08 |