
😎풀이
TrieNode
클래스를 선언한다.
1-1. 해당 클래스는 자식 노드를 저장하며 재귀적인 구조로 검색 가능한지 확인할 수 있다.
1-2. 문자의 마지막은 isEnd
속성을 통해 확인이 가능하며 이는 search
명령에 활용한다.
- 생성자의 호출 시에는
TrieNode
를 root로 갖는 작업을 진행한다.
insert
호출 시 단어의 각 자리는 재귀적인 TrieNode
에 입력되며 단어의 마지막엔 isEnd
속성을 true로 설정한다.
search
호출 시 재귀적으로 root를 탐색하여 문자를 검색하며 각 자리가 동일한지 확인한 후 최종적으로 isEnd
가 단어가 종료될 시점에 true라면 true를 반환하며 이 외에 경우는 false를 반환한다.
startsWith
호출 시 재귀적으로 root를 탐색하여 문자를 검색하며 각 자리가 동일한지 확인한 후 문자가 모두 동일할 경우 true를 반환한다.
class TrieNode {
children: { [key: string]: TrieNode };
isEnd: boolean;
constructor() {
this.children = {};
this.isEnd = false;
}
}
class Trie {
private root: TrieNode;
constructor() {
this.root = new TrieNode();
}
insert(word: string): void {
let node = this.root;
for (const char of word) {
if (!node.children[char]) {
node.children[char] = new TrieNode();
}
node = node.children[char];
}
node.isEnd = true;
}
search(word: string): boolean {
let node = this.root;
for (const char of word) {
if (!node.children[char]) {
return false;
}
node = node.children[char];
}
return node.isEnd;
}
startsWith(prefix: string): boolean {
let node = this.root;
for (const char of prefix) {
if (!node.children[char]) {
return false;
}
node = node.children[char];
}
return true;
}
}