문자열 배열이 주어지면 단어 내의 모든 문자열에 나타나는
모든 문자의 배열을 반환하는 문제.
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;
};
'Algorithm' 카테고리의 다른 글
Leetcode 2643. Row With Maximum Ones (1) | 2024.06.10 |
---|---|
Leetcode 2843. Count Symmetric Integers (0) | 2024.06.04 |
LEETCODE 2331. Evaluate Boolean Binary Tree (0) | 2024.05.20 |
LEETCODE 824. Goat Latin (0) | 2024.05.17 |
LEETCODE 1624. Largest Substring Between Two Equal Characters (0) | 2024.05.09 |