์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
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 |
- useRef
- ํ๋ก๊ทธ๋๋จธ์ค
- useEffect
- ํ๋ก ํธ์๋
- Props
- ์๋ฐ์คํฌ๋ฆฝํธ
- ์๊ณ ๋ฆฌ์ฆ
- REACT
- ์ฝ๋ฉํ ์คํธ
- ๋ธ๋ก๊ทธ
- fetch API
- Gatsby
- float
- Flex
- ๋ฐ๋ธ์ฝ์ค3๊ธฐ
- ๋ฐ๋ธ์ฝ์ค
- CSS
- history api
- position
- Today
- Total
Daehyunii's Dev-blog
2์ฃผ์ฐจ ๊ณผ์ - ํธ๋ผ์ด๋ฅผ ์ฌ์ฉํ์ฌ ์๋ ์์ฑ ์ฝ๋๋ฅผ ๊ตฌํํ์ธ์. ๋ณธ๋ฌธ
2์ฃผ์ฐจ ๊ณผ์ - ํธ๋ผ์ด๋ฅผ ์ฌ์ฉํ์ฌ ์๋ ์์ฑ ์ฝ๋๋ฅผ ๊ตฌํํ์ธ์.
Daehyunii 2022. 10. 25. 01:44ํธ๋ผ์ด ์๋ฃ ๊ตฌ์กฐ
์ด๋ฒ์ ํด๊ฒฐํด์ผ ํ๋ ๊ณผ์ ๋ ํธ๋ผ์ด ์๋ฃ ๊ตฌ์กฐ๋ฅผ ์ด์ฉํ์ฌ ๊ฒ์์ฐฝ์ ์๋ ์์ฑ ๊ธฐ๋ฅ์ ์ํํ๋ ๋ก์ง์ ๊ตฌํํ๋ ๊ฒ์ด๋ค. ์ฐ์ ํธ๋ผ์ด ์๋ฃ ๊ตฌ์กฐ๊ฐ ๋ฌด์์ธ์ง ์์์ผ ํ๋ค.
Trie ๋?
๊ณต๊ฐ ๋ณต์ก๋๊ฐ ํฐ ๋์ , ๋น ๋ฅธ ์๊ฐ ์์ ๋จ์ด๋ฅผ ๊ฒ์ํ ์ ์๋ ํธ๋ฆฌ์ ํ ์ข ๋ฅ์ด๋ค.
ํธ๋ผ์ด ์๋ฃ๊ตฌ์กฐ๋ ์ฝ๊ฒ ๋งํด ๋ฌธ์์ด์ ์ ์ฅํด์ ๊ฒ์ํ ๋ ํ์ฉํ๋ ์๋ฃ๊ตฌ์กฐ์ด๋ค. ํธ๋ผ์ด ์๋ฃ ๊ตฌ์กฐ์ ๊ฒฝ์ฐ์๋ ๊ธ๋ก ์ค๋ช ์ ๋ฃ๋๊ฒ๋ณด๋ค ๊ทธ๋ฆผ์ผ๋ก ์ดํดํ๋๊ฒ์ด ํจ์ฌ ์ง๊ด์ ์ผ๋ก ๋ฐ์๋๋ฆด ์ ์๋ค.
๊ทธ๋ฆผ์ด,, ์ํธํ์ง ๋ชปํ์ ์ดํดํ๊ธฐ ๋ฐ๋๋๋ค...; ๊ทธ๋ฆผ์ ์ค๋ช ํด ๋ณด์๋ฉด Trie ์๋ฃ๊ตฌ์กฐ์ root ๋ ธ๋๋ value ๊ฐ์ ๋ฐ๋ก ๊ฐ๊ณ ์์ง ์๋๋ค. ์ฆ ๋ค์ ๋งํด root ๋ ธ๋๊ฐ ์กด์ฌํ์ง๋ง ๋น ๋ฌธ์์ด๊ณผ ๊ฐ์ด ์๋ฌด๋ฐ ๊ฐ๋ ๊ฐ์ง์ง ์๋๊ฒ์ด ํน์ง์ด๋ค. ๊ทธ๋ฆฌ๊ณ ๋ชจ๋ ๊ฐ์ ์ ์๋ฏธ๋ฅผ ๊ฐ์ค์น๊ฐ ์์ด ์ด๋ฅผ ์ ํํํ๋๊ฒ์ด ์ค์ํ๋ค.
์ ๊ทธ๋ฆผ์ ๋ค์ ๋ฌธ์๋ก ํ์ด๋ณด์๋ฉด root node ---(h๊ฐ์ )---> 'h' node ---(e๊ฐ์ )---> 'he' node ---(l๊ฐ์ )--- > 'hel' node ์ ๊ฐ์ ๋ฐฉ์์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ฒ ๋๋ค. ์ด๋ฌํ ์ด์ ๋ก ๊ณต๊ฐ ๋ณต์ก๋ ์ธก๋ฉด์์๋ ํจ์จ์ฑ์ด ๋จ์ด์ง์ง ๋ชจ๋ฅด๋ ๋ฌธ์์ด์ ๊ฒ์ํ๋๋ฐ ๋งค์ฐ ํจ์จ์ ์ด๋ค. ๊ฐ์ ์ ํํํ๋ ๋ฐฉ๋ฒ์ผ๋ก ์ฌ๋ฌ๊ฐ์ง๊ฐ ์๊ฒ ์ง๋ง ๋๋ ๊ฐ์ฒด๋ก ํํํ๋ค. ๊ฐ์ฒด์ ํ๋กํผํฐ ํค๋ฅผ ๊ฐ์ค์น ๊ฐ์ ์ผ๋ก ํ์ฉํ๊ณ ํด๋น ํค๊ฐ ๊ฐ๋ฆฌํค๋ ๊ฐ์ผ๋ก ๋ ธ๋๋ฅผ ์ง์ด๋ฃ์๋ค.
node๋ ๊ธฐ๋ณธ์ ์ผ๋ก 3๊ฐ์ง ํ๋กํผํฐ๋ก ๊ตฌ์ฑํ๋ค. ๊ฐ์ ๋ด๊ณ ์์ด์ผ ํ๊ธฐ ๋๋ฌธ์ value, ์์ ๋ ธ๋๋ฅผ ๊ฐ๋ฆฌํค๊ธฐ ์ํด child(์ฌ๊ธฐ์ ๊ฐ์ค์น ๊ฐ์ ์ ํํ), ๋ง์ง๋ง์ผ๋ก ๋จ์ด๋ฅผ ๋ฐ๋ณตํ๋ฉด์ ๋๊น์ง ์จ์ ํ ๋จ์ด๋ฅผ ์ ๋ถ Trie์ ๋ด์ ๊ฒฝ์ฐ์ ๋ค ๋ด์๋ค๋ ๊ฒ์ ํํํ๊ธฐ ์ํด complete ํ๋กํผํฐ๋ฅผ ๋ง๋ค์๋ค. (์ด๋ฅผ ํตํด ํ์์ ํ๋ฉด์ complete๊ฐ true์ธ ๊ฒฝ์ฐ์๋ง ๋ฐ์ดํฐ๋ฅผ ๋ชจ์์ ๋ฐํํ๊ฒ ํ์ฌ ์๋์์ฑ ๊ธฐ๋ฅ์ ๊ตฌํ)
ํธ๋ผ์ด ์๋์์ฑ ๊ธฐ๋ฅ ๊ตฌํ
// ํธ๋ผ์ด ์๋ฃ๊ตฌ์กฐ ์๋์์ฑ
class TrieNode {
constructor(value = '') {
this.value = value;
this.child = {};
this.complete = false;
}
}
class Trie {
constructor() {
this.root = new TrieNode();
}
insert(string) { // ๋ฌธ์์ด ์ฝ์
๋ก์ง
let currentNode = this.root;
for(let i = 0 ; i < string.length ; i++) {
let currentChar = string[i];
if(currentNode.child[currentChar] === undefined) {
currentNode.child[currentChar] = new TrieNode(currentNode.value + currentChar);
currentNode = currentNode.child[currentChar];
} else {
currentNode = currentNode.child[currentChar];
}
}
currentNode.complete = true;
}
search(string) { // ์์ ํ์์ ํ๊ธฐ ์ํด ํ์์ ์์ ํ ๋
ธ๋๋ฅผ ์ฐพ๋ ๋ก์ง(autoComplete ํจ์๋ฅผ ๋ณด์)
let currentNode = this.root;
for(let i = 0 ; i < string.length ; i++) {
let currentChar = string[i];
if(currentNode.child[currentChar] === undefined) {
return undefined;
} else {
currentNode = currentNode.child[currentChar];
}
}
return currentNode;
}
autoComplete(string) { // ์์ ํ์ ํ ๋
ธ๋์ complete ํ๋กํผํฐ๊ฐ true์ธ ๋จ์ด๋ค๋ง ๋ฐฐ์ด์ ๋ด์ ๋ฐํํ๋ ํจ์
let node = this.search(string);
if(node === undefined) return null;
let data = [];
let queue = [];
queue.push(node);
while(queue.length) {
node = queue.shift();
if(node.complete === true) {
data.push(node.value)
}
if(Object.keys(node.child).length > 0){
for(let item in node.child) {
queue.push(node.child[item]);
}
}
}
return data;
}
}
let trie = new Trie();
trie.insert('hell');
trie.insert('hat');
trie.insert('hot');
trie.insert('hel');
trie.insert('het')
trie.insert('htt')
console.log(trie.autoComplete('')); // ['hel', 'het', 'hat', 'hot', 'htt', 'hell']
console.log(trie.autoComplete('he')); // ['hel', 'het', 'hell']
console.log(trie.autoComplete('t')); // ์๋ ๋ฌธ์์ด์ ๊ฒฝ์ฐ์๋ null ๋ฐํ
https://github.com/WooDaeHyun/Dev_course-first-assignment.git