문제 이해하기
두 배열을 비교하여 같은 위치(인덱스)에 있는 값이 몇 개 일치하는지 세는 함수를 작성해야 합니다. 중요한 점은 이 비교가 순서에 의존한다는 것입니다. 즉, 첫 번째 배열의 첫 번째 요소는 두 번째 배열의 첫 번째 요소와 비교하고, 두 번째 요소는 두 번째 요소와 비교하는 식으로 진행됩니다.
예를 들어 다음과 같은 두 배열이 입력으로 주어졌다고 가정해 보겠습니다.
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;
};이렇게 하면 배열의 길이와 관계없이 항상 안전하게 대응되는 인덱스의 값만 비교할 수 있습니다.