문제 상황
다음과 같이 길이가 같은 두 개의 숫자 배열이 있다고 가정해 봅시다.
const arr1 = [23, 67, 12, 87, 33, 56, 89, 34, 25];
const arr2 = [12, 60, 45, 54, 67, 84, 36, 73, 44];두 배열을 각각 첫 번째, 두 번째 인수로 받아 대응하는 값들을 서로 비교하는 JavaScript 함수를 작성해야 합니다. 함수는 다음과 같은 값을 반환해야 합니다.
- -1: 첫 번째 배열에서 더 큰 대응 숫자의 개수가 두 번째 배열보다 많을 때
- 1: 두 번째 배열에서 더 큰 대응 숫자의 개수가 첫 번째 배열보다 많을 때
- 0: 양쪽의 개수가 동일할 때
예상 결과
위 배열을 예로 들면 출력값은 다음과 같습니다.
const output = 1;그 이유는 arr1에는 더 큰 대응 요소가 4개 있는 반면, arr2에는 5개가 있기 때문입니다.
구현 코드
이를 구현한 코드는 아래와 같습니다.
const arr1 = [23, 67, 12, 87, 33, 56, 89, 34, 25];
const arr2 = [12, 60, 45, 54, 67, 84, 36, 73, 44];
const findDominance = (arr1 = [], arr2 = []) => {
if(arr1.length !== arr2.length){
return;
};
let count = 0;
for(let i = 0; i < arr1.length; i++){
const el1 = arr1[i];
const el2 = arr2[i];
const diff = el2 - el1;
console.log(diff)
count += diff / Math.abs(diff);
};
return count / Math.abs(count);
};
console.log(findDominance(arr1, arr2));동작 원리
각 인덱스에서 두 요소의 차이(diff)를 계산한 뒤, 이를 자신의 절댓값으로 나누어 부호(+1 또는 -1)만 추출하고 모두 더합니다. 마지막으로 합계를 다시 그 절댓값으로 나누면 최종적으로 -1, 1, 0 중 하나의 값이 반환됩니다.
단, 두 요소가 정확히 같아서 diff가 0이 되는 경우 diff / Math.abs(diff)는 NaN이 되므로, 실무에서는 이 경우를 별도로 처리해 주는 것이 안전합니다.
실행 결과
콘솔에 출력되는 결과는 다음과 같습니다.
-11
-7
33
-33
34
28
-53
39
19
1