문제 정의
행과 열의 개수가 동일한 m×n 크기의 숫자형 2차원 배열이 주어졌을 때, JavaScript 함수를 작성하여 아래 수식과 같은 교차 합계(alternating sum)를 계산해 반환해야 합니다.
Σi=1..m Σj=1..n (−1)i+j · aij
쉽게 말해, 각 요소에 대해 행 인덱스와 열 인덱스의 합(i+j)이 짝수이면 그 값을 더하고(+), 홀수이면 빼는(−) 방식입니다. 체스판의 칸처럼 부호가 번갈아 배치되는 패턴이라고 생각하면 이해하기 쉽습니다.
구현 코드
const arr = [
[4, 6, 3],
[1, 8, 7],
[2, 5, 9]
];
const alternateSum = (arr = []) => {
let sum = 0;
for(let i = 0; i < arr.length; i++){
for(let j = 0; j < arr[i].length; j++){
const multiplier = (i + j) % 2 === 0 ? 1 : -1;
sum += (multiplier * arr[i][j]);
}
}
return sum;
};
console.log(alternateSum(arr));실행 결과
7
코드 동작 원리
- 초기화: 합계를 누적할 변수 sum을 0으로 선언합니다.
- 이중 반복문: 바깥쪽 루프는 행(i), 안쪽 루프는 열(j)을 순회하며 배열의 모든 요소를 한 번씩 방문합니다.
- 부호 결정: (i + j) % 2 === 0 조건으로 부호를 정합니다. i+j가 짝수면 +1, 홀수면 −1을 곱합니다.
- 누적 및 반환: 부호가 적용된 값을 sum에 더하고, 모든 순회가 끝나면 최종 합계를 반환합니다.
결과 검산
예제 배열에서 덧셈이 적용되는 위치의 값은 4, 3, 8, 2, 9로 합계 26이고, 뺄셈이 적용되는 위치의 값은 6, 1, 7, 5로 합계 19입니다. 따라서 26 − 19 = 7이 최종 결과로 반환됩니다.