var leftRightDifference = function(nums) {
let rightSum = nums.reduce((acc, cur) => acc + cur, 0)
let leftSum = 0;
return nums.map(e => {
rightSum -= e;
let res = rightSum - leftSum;
leftSum += e;
return Math.abs(res);
})
};
문제의 요구사항에 맞춰 단순하게 접근해서 for문이나 map 메소드를 이용해서
leftSum
배열과rightSum
배열을 하나하나 구한 후 두 배열의 차를 얻는 방법으로 해결할수도있다.
하지만 뭔가 수학적인(?) 규칙이 있는 것 같아 그 규칙을 이용해서 풀어보았다.
예제를 이용해서 알아낸 규칙은 다음과 같다.
index LeftSum RightSum 0 1 + 2 + 3 + ... + nums.length-1 1 0 2 + 3 + ... + nums.length-1 2 0 + 1 3 + ... + nums.length-1 3 0 + 1 + 2 4 + ... + nums.length-1 nums.length-1 0 + 1 + 2 + 3 + ... + nums.length-2 즉, 특정 인덱스에서 해당 요소가
LeftSum
에는 더해지고 동시에RightSum
에서는 빼지게된다.
그래서 일단RightSum
을 모든 요소들의 합,LeftSum
을 0으로 초기설정한다.
그리고 map 메소드를 이용한다.
먼저rightSum
에서 현재 요소를 뺀 다음leftSum
를 뺀다. 그리고 그 다음에leftSum
에 현재 요소를 더한다.