[프로그래머스] 레벨4 (level4) 자동완성

2021년 02월 05일, 10:30

Trie를 이용한 풀이

  1. add : Trie에 해당 문자을 포함하고 있는 단어들의 count를 같이 저장해준다.
  2. 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;
}