이 문제는 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']));
hash
, hash2
각각의 변수에 새로운 빈 map
을 할당합니다.hash
에 입력값 words
의 첫 번째 문자를 알파벳 별로 수를 세어 키와 값을 할당합니다.words
의 첫 번째 문자는 비교를 위해 더 이상 사용되지 않으므로 제거합니다.words
의 나머지 문자들을 반복문으로 돌면서, 각각의 알파벳을 비교합니다. hash
에 없는 알파벳이거나, 그 수가 0
인 경우에는 공통문자가 될 수 없으므로 반목문을 건너뜁니다.hash2
에는 해당 문자의 알파벳들의 숫자를 더하고, hash
에는 알파벳들의 숫자를 감소시킵니다.hash
에 hash2
를 할당하고, hash2
는 초기화합니다.hash
에는 공통된 문자의 수만 남게 됩니다. 마지막으로 hash
를 순회하여 빈 배열에 값을 넣습니다.['s', 's', 'e', 'a']
['k', 'k', 'c']
['l', 'o', 'n', 'g', 'g']