var diagonalSum = function(mat) {
return mat.reduce((acc, cur, idx) =>
idx === cur.length - 1 - idx ? acc + cur[idx] : acc + cur[idx] + cur[cur.length - 1 - idx]
, 0)
};
필자의 접근방법은 포인터 두 개를 이용한 방법이다.
1. 0번째 요소(배열)에서 더할 요소는 인덱스0
과요소.length - 1
이다.
2. 1번째 요소(배열)에서 더할 요소는 인덱스1
과요소.length - 2
이다.
3. 2번째 요소(배열)에서 더할 요소는 인덱스2
과요소.length - 3
이다.
위와 같은 패턴이 나타난다. 즉,
- n번째 요소(배열)에서 더할 요소는 인덱스
n
과요소.length - 1 - n
이다.이 규칙을 이용해서 합을 구하면 된다.
주의할 점은mat
의 길이가 홀수일 경우 정중앙의 요소가 중복으로 더해진다. 이 경우는 두 포인터의 값이 동일할때 발생한다. 이 경우를 캐치해서 한 번만 더해주도록 했다.