# ํธ๋ผ์ด(Trie)
๋ฌธ์์ด์์ ๊ฒ์์ ๋น ๋ฅด๊ฒ ๋์์ฃผ๋ ์๋ฃ๊ตฌ์กฐ
์ ์ํ์์ ์ด์งํ์ํธ๋ฆฌ๋ฅผ ์ด์ฉํ๋ฉด ์๊ฐ๋ณต์ก๋ O(logN)
ํ์ง๋ง ๋ฌธ์์ด์์ ์ ์ฉํ์ ๋, ๋ฌธ์์ด ์ต๋ ๊ธธ์ด๊ฐ M์ด๋ฉด O(M*logN)์ด ๋๋ค.
ํธ๋ผ์ด๋ฅผ ํ์ฉํ๋ฉด? โ O(M)์ผ๋ก ๋ฌธ์์ด ๊ฒ์์ด ๊ฐ๋ฅํจ!
์์ ๊ทธ๋ฆผ์์ ์ฃผ์ด์ง๋ ๋ฐฐ์ด์ ์ด ๋ฌธ์์ด ๊ฐ์๋ 8๊ฐ์ธ๋ฐ, ํธ๋ผ์ด๋ฅผ ํ์ฉํ ํธ๋ฆฌ์์๋ ๋ง์ง๋ง ๋๋๋ ๋ ธ๋๋ง๋ค '๋ค๋ชจ' ๋ชจ์์ผ๋ก ๊ตฌ์ฑ๋ ๊ฒ์ ํ์ธํ๋ฉด ์ด 8๊ฐ๋ค.
ํด๋น ์๋ฃ๊ตฌ์กฐ๋ฅผ ํ์ด๋ณด๊ธฐ ์ํด ์ข์ ๋ฌธ์ : ๋ฐฑ์ค 5052(์ ํ๋ฒํธ ๋ชฉ๋ก) (opens new window)
# ๋ฌธ์ ์์ Trie๋ฅผ java๋ก ๊ตฌํํ ์ฝ๋
static class Trie {
boolean end;
boolean pass;
Trie[] child;
Trie() {
end = false;
pass = false;
child = new Trie[10];
}
public boolean insert(String str, int idx) {
//๋๋๋ ๋จ์ด ์์ผ๋ฉด false ์ข
๋ฃ
if(end) return false;
//idx๊ฐ str๋งํผ ์์๋
if(idx == str.length()) {
end = true;
if(pass) return false; // ๋ ์ง๋๊ฐ๋ ๋จ์ด ์์ผ๋ฉด false ์ข
๋ฃ
else return true;
}
//์์ง ์์์ ๋
else {
int next = str.charAt(idx) - '0';
if(child[next] == null) {
child[next] = new Trie();
pass = true;
}
return child[next].insert(str, idx+1);
}
}
}
โ - ํด์(Hash) - B Tree & B+ Tree โ