문제 이해하기
숫자 배열을 입력받아, 홀수 인덱스에 위치한 요소들의 합과 짝수 인덱스에 위치한 요소들의 합 사이의 차이를 반환하는 JavaScript 함수를 작성해야 합니다.
예를 들어 다음과 같은 배열이 주어졌다고 가정해 보겠습니다.
const arr = [3, 6, 34, 12, 6, 8, 8, 5, 6, 8];
이 경우 함수는 짝수 인덱스(0, 2, 4, ...) 요소들의 합에서 홀수 인덱스(1, 3, 5, ...) 요소들의 합을 뺀 값의 절댓값을 반환해야 합니다.
풀이 접근 방식
배열을 처음부터 끝까지 순회하면서 현재 인덱스가 짝수인지 홀수인지 판별합니다. 짝수 인덱스라면 누적 변수에 해당 요소를 더하고, 홀수 인덱스라면 빼줍니다. 모든 순회가 끝난 후 Math.abs()를 사용해 절댓값을 반환하면 두 합의 차이를 얻을 수 있습니다.
예제 코드
const arr = [3, 6, 34, 12, 6, 8, 8, 5, 6, 8];
const oddEvenDiff = arr => {
let diff = 0;
for(let i = 0; i < arr.length; i++){
if(i % 2 === 0){
diff += arr[i];
}else{
diff -= arr[i]
};
};
return Math.abs(diff);
};
console.log(oddEvenDiff(arr));
실행 결과
콘솔에 다음과 같은 출력이 나타납니다.
18
동작 원리 상세 설명
위 코드가 어떻게 18이라는 결과를 도출하는지 단계별로 살펴보겠습니다.
- 짝수 인덱스(0, 2, 4, 6, 8) 요소들의 합: 3 + 34 + 6 + 8 + 6 = 57
- 홀수 인덱스(1, 3, 5, 7, 9) 요소들의 합: 6 + 12 + 8 + 5 + 8 = 39
- 두 합의 차이: |57 − 39| = 18
루프 내부에서는 i % 2 === 0 조건으로 인덱스의 홀짝 여부를 확인합니다. 나머지 연산자(%)를 활용한 이 방식은 시간 복잡도 O(n)으로 배열을 한 번만 순회하므로 매우 효율적입니다. 또한 Math.abs()를 적용했기 때문에 어느 쪽 합이 더 크더라도 항상 양수인 차이 값을 얻을 수 있다는 장점이 있습니다.