ACM준비/Programmers

자동완성

조규현15 2022. 12. 12. 21:51
반응형

https://school.programmers.co.kr/learn/courses/30/lessons/17685

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

입력받는 키워드 ( char ) 를 tree 로 만들고,

각 키워드를 순회하며 중복되지 않은 ( 겹치는 단어가 없는 ) node 에 도달하면 해당 node 의 depth 가 단어를 검색하는데 필요한 최소 단어 갯수이다.

 

tree 를 만드는 전체 과정은 O(N*2) 이 수행되고, 단어를 찾는 과정은 O(N) 이 수행된다.

function solution(words) {
  var rootDict = new Map();

  function update(word) {
    var curDict = rootDict;
    for (var idx = 0; idx < word.length; idx++) {
      var char = word[idx];
      if (!curDict.has(char)) {
        var tmpDict = new Map();
        // set item
        curDict.set(char, { dict: tmpDict, count: 0 });
      }
      
      var item = curDict.get(char);
      
      item.count += 1;
      curDict = item.dict;
    }
  }

  function count(word) {
    var curDict = rootDict;
    for (var idx = 0; idx < word.length; idx++) {
      var char = word[idx];
      var item = curDict.get(char);
      if (item.count == 1) return idx + 1;

      curDict = item.dict;
    }
    return idx;
  }

  words.forEach((word) => update(word));
  var answer = words.reduce(
    (accumulator, currentValue) => accumulator + count(currentValue),
    0
  );
  return answer;
}
반응형

'ACM준비 > Programmers' 카테고리의 다른 글

개인정보 수집 유효기간  (0) 2023.05.10
올바른 괄호의 갯수  (0) 2023.01.09
쿠키 구입  (0) 2023.01.09
무지의 먹방 라이브  (0) 2022.12.12
호텔 방 배정  (0) 2022.12.03