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;
};