문제 정의
두 개의 문자열 배열을 인자로 받는 JavaScript 함수를 작성해야 합니다. 이 함수는 두 번째 배열에 포함된 각 문자열이 첫 번째 배열 안에 몇 번 등장하는지 계산한 뒤, 그 결과를 배열 형태로 반환해야 합니다.
코드 예제
다음은 중첩 반복문을 활용해 각 문자열의 등장 횟수를 세는 구현 예시입니다.
const arr1 = ['abc', 'abc', 'xyz', 'cde', 'uvw'];
const arr2 = ['abc', 'cde', 'uap'];
const findFrequency = (arr1 = [], arr2 = []) => {
const res = [];
let count = 0;
for (let i = 0; i < arr2.length; i++){
for (let j = 0; j < arr1.length; j++){
if (arr2[i] === arr1[j]){
count++;
}
}
res.push(count);
count = 0;
}
return res;
};
console.log(findFrequency(arr1, arr2));
동작 방식
findFrequency 함수는 바깥쪽 반복문으로 두 번째 배열(arr2)의 요소를 하나씩 순회하고, 안쪽 반복문으로 첫 번째 배열(arr1) 전체를 검사하며 값이 일치할 때마다 count를 증가시킵니다. 각 문자열에 대한 탐색이 끝나면 결과 배열(res)에 count를 추가하고, 다음 문자열을 위해 count를 0으로 초기화합니다.
실행 결과
[2, 1, 0]
'abc'는 첫 번째 배열에 2번, 'cde'는 1번, 'uap'는 0번 등장하므로 최종 결과는 [2, 1, 0]이 됩니다.
성능 개선 팁
위 방식의 시간 복잡도는 O(n × m)으로, 배열의 크기가 커지면 처리 속도가 느려질 수 있습니다. 배열이 큰 경우에는 Map 객체를 사용해 첫 번째 배열의 요소 빈도를 미리 계산해 둔 뒤 조회하는 방식(O(n + m))이 훨씬 효율적입니다.