Computer >> 컴퓨터 >  >> 프로그래밍 >> JavaScript

JavaScript로 한 배열의 요소가 다른 배열에 등장하는 빈도 구하기

문제 정의

두 개의 문자열 배열을 인자로 받는 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))이 훨씬 효율적입니다.