์ฝ๋
package tree;
class Lt208 {
class Trie {
TrieNode root;
// ํด๋์ค ์์ฑ ์ ๋ฃจํธ๋ก ๋น ํธ๋ผ์ด ๋
ธ๋ ์์ฑ
public Trie() {
root = new TrieNode();
}
// ๋จ์ด ์ฝ์
public void insert(String word) {
// ๋ฃจํธ๋ถํฐ ์์
TrieNode now = root;
// ๋จ์ด์ ๋ฌธ์๋ฅผ ์ฐจ๋ก๋๋ก ๋ฐ๋ณตํ๋ฉฐ ์์ ๋
ธ๋ ๊ตฌ์ฑ
for (char c : word.toCharArray()) {
// ํด๋น ๋ฌธ์์ ์์ ๋
ธ๋๊ฐ ์กด์ฌํ์ง ์์ผ๋ฉด ์ ๊ท trie ๋
ธ๋ ์์ฑ
// ์ธ๋ฑ์ค๋ 'a': 0, 'z': 25
if (now.children[c - 'a'] == null) {
now.children[c - 'a'] = new TrieNode();
}
// ์์ ๋
ธ๋๋ฅผ ํ์ฌ ๋
ธ๋๋ก ๊ต์ฒด
now = now.children[c - 'a'];
}
now.word = true;
}
// ๋จ์ด ์กด์ฌ ์ฌ๋ถ ํ๋ณ
public boolean search(String word) {
TrieNode now = root;
for (char c : word.toCharArray()) {
if (now.children[c - 'a'] == null) {
return false;
}
now = now.children[c - 'a'];
}
return now.word;
}
// ๋ฌธ์์ด๋ก ์์ ๋จ์ด ์กด์ฌ ์ฌ๋ถ ํ๋ณ
public boolean startsWith(String prefix) {
TrieNode now = root;
for (char c : prefix.toCharArray()) {
if (now.children[c - 'a'] == null) {
return false;
}
now = now.children[c - 'a'];
}
// ํ์์ด ์ข
๋ฃ๋๋ฉด ํญ์ true ๋ฆฌํด, ์์ ์ฌ๋ถ๋ง ํ๋ณํ๋ฉด ๋๋ฏ๋ก ๋จ์ด ์์ฑ ์ฌ๋ถ๊ฐ false์ฌ๋ ๊ด๊ณ X
return true;
}
}
}
Java
๋ณต์ฌ
package tree;
class TrieNode {
// ๋จ์ด ์์ฑ ์ฌ๋ถ
boolean word;
// ํธ๋ผ์ด์ ์์ ๋
ธ๋๋ค
TrieNode[] children;
public TrieNode() {
// ์์ ๋
ธ๋๋ ์ํ๋ฒณ ๊ฐ์ 26๊ฐ๊น์ง ๊ฐ๋ฅ
children = new TrieNode[26];
word = false;
}
}
Java
๋ณต์ฌ
๋ฌธ์ ํด๊ฒฐ ์์ด๋์ด
ํธ๋ผ์ด์ ์ฝ์
, ์ญ์ , ๋ฑ์ ๋ชจ๋ ๊ตฌํํ๋ค.