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

JavaScript로 두 배열의 같은 인덱스 값 일치 개수 구하기

문제 이해하기

두 배열을 비교하여 같은 위치(인덱스)에 있는 값이 몇 개 일치하는지 세는 함수를 작성해야 합니다. 중요한 점은 이 비교가 순서에 의존한다는 것입니다. 즉, 첫 번째 배열의 첫 번째 요소는 두 번째 배열의 첫 번째 요소와 비교하고, 두 번째 요소는 두 번째 요소와 비교하는 식으로 진행됩니다.

예를 들어 다음과 같은 두 배열이 입력으로 주어졌다고 가정해 보겠습니다.

const arr1 = [4, 7, 4, 3, 3, 3, 7, 6, 5];
const arr2 = [6, 5, 4, 5, 3, 2, 5, 7, 5];

두 배열을 인덱스별로 하나씩 비교해 보면 값이 서로 일치하는 경우는 총 3번(인덱스 2, 4, 8)입니다. 따라서 출력 결과는 3이 되어야 합니다.

for 반복문을 활용한 해결 방법

이 문제는 for 반복문을 사용해 두 배열의 같은 인덱스에 있는 값을 하나씩 비교하면 간단히 해결할 수 있습니다. 값이 일치하면 카운터를 증가시키고, 일치하지 않으면 continue로 해당 순회를 건너뛰면 됩니다.

예제 코드

const arr1 = [4, 7, 4, 3, 3, 3, 7, 6, 5];
const arr2 = [6, 5, 4, 5, 3, 2, 5, 7, 5];

const correspondingEquality = (arr1, arr2) => {
  let res = 0;
  for(let i = 0; i < arr1.length; i++){
    if(arr1[i] !== arr2[i]){
      continue;
    }
    res++;
  }
  return res;
};

console.log(correspondingEquality(arr1, arr2));

실행 결과

콘솔에 다음과 같은 결과가 출력됩니다.

3

코드 상세 설명

  • correspondingEquality(arr1, arr2): 두 배열을 매개변수로 받아 일치하는 요소의 개수를 반환하는 화살표 함수입니다.
  • let res = 0: 일치한 요소의 개수를 저장할 카운터 변수입니다.
  • arr1[i] !== arr2[i]: 엄격한 불일치 연산자(!==)를 사용해 값과 데이터 타입까지 정확하게 비교합니다. 값이 다르면 continue로 다음 인덱스로 넘어갑니다.
  • res++: 값이 일치할 때마다 카운터를 1씩 증가시킵니다.

추가 팁: 배열 길이가 다를 때

위 코드는 첫 번째 배열의 길이를 기준으로 순회하기 때문에, 만약 두 배열의 길이가 서로 다르다면 의도하지 않은 동작이 발생할 수 있습니다. 이런 경우 Math.min()을 활용해 더 짧은 배열의 길이까지만 비교하는 것이 안전합니다.

const correspondingEquality = (arr1, arr2) => {
  const len = Math.min(arr1.length, arr2.length);
  let res = 0;
  for(let i = 0; i < len; i++){
    if(arr1[i] === arr2[i]) res++;
  }
  return res;
};

이렇게 하면 배열의 길이와 관계없이 항상 안전하게 대응되는 인덱스의 값만 비교할 수 있습니다.