Algorithm
LEETCODE 1002. find-common-characters
KANG_G1
2024. 6. 1. 10:50
문자열 배열이 주어지면 단어 내의 모든 문자열에 나타나는
모든 문자의 배열을 반환하는 문제.
Example 1:
Input: words = ["cool","lock","cook"]
Output: ["c","o"]
문제 접근
모든 문자열에 공통되는 단어라면 어떠한 문자열을 기준 삼아도 됐지만
배열의 첫번째 문자열이 문제를 풀 때 편하겠다 싶어 첫 문자열을 변수에 할당했습니다.
두 번째로 요소마다 공통 문자를 찾아야 했는데요.
의미 없이 반복문을 여러 번 사용해서 찾기보단 JS의 every라는 메서드를 사용해 처리했습니다.
가독성도 좋고, 훨씬 효율적이니까요!
이후 공통 문자가 있다면 return 할 배열에 추가해 주는 것으로 해결하려고 했습니다만
테스트를 통과하지 못했는데요.
첫 번째 문자열에 공통 문자가 2개이고, 다른 문자열에 공통 문자가 1개라면
return 할 문자열에 한번 더 공통문자가 추가되면서 문제가 발생했습니다.
문제 해결
2개의 공통 문자를 지닌 첫 번째 문자열에서 공통문자 하나를 지워줘도
나머지 문자열에 공통문자가 존재한다면 위와 같은 결과가 반복될 것이 예상되었는데요.
공통 문자를 추가한 후 원본 문자열 배열인 word에서
각 요소에 접근해 공통 문자를 제거해 주며 문제를 해결할 수 있었습니다.
/**
* @param {string[]} words
* @return {string[]}
*/
var commonChars = function(words) {
const output = [];
const firstWord = words[0].split('');
for(const char of firstWord) {
const hasChar = words.every((word)=> word.includes(char));
if(hasChar) {
output.push(char);
words = words.map((word) => word.replace(char,''));
}
}
return output;
};