공통문자찾기

김효식 (HS KIM)·2021년 10월 7일
0

이 문제는 N개의 문자열이 주어졌을 때, 모든 문자열의 공통된 문자를 찾아 출력하는 문제입니다. 자바스크립트의 Map 자료구조를 활용하여 풀이하였습니다.

function solution(words) {
  let hash = new Map(),
    hash2 = new Map();
  for (let char of words[0]) {
    hash.set(char, (hash.get(char) || 0) + 1);
  }
  words.shift();

  for (let word of words) {
    for (let char of word) {
      if (!hash.has(char) || hash.get(char) === 0) continue;
      hash2.set(char, (hash2.get(char) || 0) + 1);
      hash.set(char, hash.get(char) - 1);
    }
    hash = hash2;
    hash2 = new Map();
  }

  let result = [];
  for (let [key, value] of hash) {
    for (let i = 0; i < value; i++) {
      result.push(key);
    }
  }
  return result;
}

console.log(solution(['steasue', 'sasseysu', 'kseseas']));
console.log(solution(['ackky', 'kabck', 'yokkcs']));
console.log(solution(['longlong', 'longtong', 'longbig']));
  1. hash, hash2 각각의 변수에 새로운 빈 map 을 할당합니다.
  2. hash 에 입력값 words 의 첫 번째 문자를 알파벳 별로 수를 세어 키와 값을 할당합니다.
  3. words 의 첫 번째 문자는 비교를 위해 더 이상 사용되지 않으므로 제거합니다.
  4. words 의 나머지 문자들을 반복문으로 돌면서, 각각의 알파벳을 비교합니다. hash 에 없는 알파벳이거나, 그 수가 0 인 경우에는 공통문자가 될 수 없으므로 반목문을 건너뜁니다.
  5. 반복문 안에서 계속해서 hash2 에는 해당 문자의 알파벳들의 숫자를 더하고, hash 에는 알파벳들의 숫자를 감소시킵니다.
  6. 반목문을 마치면 다음 문자와 비교할 수 있게 hashhash2 를 할당하고, hash2 는 초기화합니다.
  7. 모든 반복문을 돌면, hash 에는 공통된 문자의 수만 남게 됩니다. 마지막으로 hash 를 순회하여 빈 배열에 값을 넣습니다.
['s', 's', 'e', 'a']
['k', 'k', 'c']
['l', 'o', 'n', 'g', 'g']
profile
자기개발 :)

0개의 댓글