Trie를 이용한 풀이
- add : Trie에 해당 문자을 포함하고 있는 단어들의 count를 같이 저장해준다.
- find : 해당 문자를 가지고 있는 단어가 1개인 경우 inputCount를 리턴해준다.
function Trie() {
this.root = {};
this.add = word => {
let parent = this.root;
for (const ch of word) {
if (parent[ch]) {
parent[ch].count += 1;
parent = parent[ch];
continue;
}
parent[ch] = { count: 1 };
parent = parent[ch];
}
};
this.find = word => {
let parent = this.root;
let inputCount = 0;
for (const ch of word) {
inputCount++;
const wordsCount = parent[ch].count;
if (wordsCount > 1) {
parent = parent[ch];
continue;
}
break;
}
return inputCount;
};
}
function solution(words) {
let answer = 0;
const trie = new Trie();
words.forEach(word => {
trie.add(word);
});
words.forEach(word => {
answer += trie.find(word);
});
return answer;
}