λ¬Έμ νμ
Trie
μλ£κ΅¬μ‘°λ₯Ό ꡬνν΄μΌνλ λ¬Έμ μ΄λ€.
νΈλΌμ΄λ λ¬Έμμ΄μ μ μ₯νκ³ ν¨μ¨μ μΌλ‘ νμνκΈ° μν νΈλ¦¬ ννμ μλ£κ΅¬μ‘°μ΄λ€.
ν΄μ ν μ΄λΈμ μ¬μ©νλ©΄ λλλ°, μ νΈλΌμ΄λ₯Ό μ¬μ©ν΄μΌν κΉ?
π¨ ν΄μ ν μ΄λΈμ κ²½μ° μ λμ¬λ λΆλΆ λ¬Έμμ΄λ‘ κ²μνκΈ° νλ€λ€. λν, ν΄μ μ½λλ‘ μ μ₯νκΈ° λλ¬Έμ μ λ ¬λμ΄ μμ§ μλ€.
νμ΄
1οΈβ£
Node ν΄λμ€ μ μ
class Trie {
Node root;
static class Node {
Map<Character, Node> children;
boolean isEndOfWord;
public Node() {
this.children = new HashMap<>();
this.isEndOfWord = false;
}
}
public Trie() {
this.root = new Node();
}
}
Trie
μλ£κ΅¬μ‘°λ νΈλ¦¬ ννμ΄κΈ° λλ¬Έμ, λ
Έλμ λ
Έλκ°μ μ°κ²°λ‘ ννν΄μΌνλ€.
λ°λΌμ, Node
ν΄λμ€λ₯Ό μ μν΄μ€λ€.
insert ꡬν
public void insert(String word) {
insert(this.root, word);
}
private void insert(Node node, String word) {
if (word.length() == 0) {
node.isEndOfWord = true;
return;
}
char c = word.charAt(0);
Node child;
if (!node.children.containsKey(c)) {
child = new Node();
node.children.put(c, child);
} else {
child = node.children.get(c);
}
insert(child, word.substring(1));
}
μ λ ₯νλ λ¬Έμμ΄μ λ¬Έμλ‘ μͺΌκ°μ΄ κ΄λ¦¬νλ€.
λμ΄μ λ¬Έμμ΄μ΄ μμ λκΉμ§ μ¬κ·μ μΌλ‘ λμνκ³ , λ¬Έμμ΄μ΄ μ‘΄μ¬νμ§ μλ κ²½μ° isEndOfWord
νλλ₯Ό true
λ‘ μ€μ νκ³ λΉ μ Έλμ¨λ€.
search ꡬν
public boolean search(String word) {
return search(this.root, word);
}
private boolean search(Node node, String word) {
if (word.length() == 0) {
return node.isEndOfWord;
}
char c = word.charAt(0);
if (!node.children.containsKey(c)) {
return false;
}
return search(node.children.get(c), word.substring(1));
}
insert
μ λΉμ·νλ€.
λ¬Έμμ΄μ λ¬Έμλ‘ μͺΌκ° ν, κ° λ¬Έμμ ν΄λΉνλ ν€ κ°μΌλ‘νλ λ Έλλ₯Ό μ°Ύμκ°λ€.
λ§μ½, ν€ κ°μΌλ‘ νλ λ
Έλκ° null
μΈκ²½μ° false
λ₯Ό λ°ννλ€.
startsWith ꡬν
public boolean startsWith(String prefix) {
Node currentNode = this.root;
for (char c : prefix.toCharArray()) {
if (!currentNode.children.containsKey(c)) {
return false;
}
currentNode = currentNode.children.get(c);
}
return true;
}
κ²μνλ €λ μ λμ΄λ₯Ό λ¬Έμλ‘ μͺΌκ° λ€, μμ λ Έλκ° ν΄λΉ λ¬Έμλ₯Ό ν€κ°μΌλ‘ νλ λ Έλλ₯Ό κ°λμ§ κ²μ¬νλ κ³Όμ μ΄λ€.
κ²°κ³Ό
π νκ³
Trie
λΌλ μλ£κ΅¬μ‘°κ° μλ€λ κ²μ κ°μλ₯Ό ν΅ν΄ μ²μ μκ² λμμλλ°
μ΄λ κ² λ°λ‘ μλ£κ΅¬μ‘°λ‘μ ꡬννλ λ¬Έμ λ₯Ό μ§μ νμ΄λ³΄λ, Trie
μλ£κ΅¬μ‘°μ λν΄ λ κΉμ μ΄ν΄λ₯Ό ν μ μμλ κ² κ°λ€.
νλ² ν΄λ΄€λ€κ³ λλΌ κ²μ΄ μλλΌ, μ΄ λ¬Έμ λ₯Ό μ¬λ¬λ² νμ΄λ΄μΌκ² λ€λ μκ°μ΄ λ€μλ€.