TapeEquilibrium
문제 설명
배열 A를 두 부분으로 나눈 후, 두 부분의 합의 차이(절대값)를 최소화하는 문제.
예제
typescript
A = [3, 1, 2, 4, 3]
결과: 1풀이
Prefix Sum을 활용하여 O(N)에 해결.
- 배열 전체 합(
totalSum)을 구한다 - 왼쪽부터 순회하며
leftSum을 누적하고,rightSum = totalSum - leftSum으로 계산 |leftSum - rightSum|의 최소값을 갱신
코드
typescript
function solution(A: number[]): number {
let totalSum = A.reduce((acc, num) => acc + num, 0)
let leftSum = 0
let minDiff = Infinity
for (let i = 0; i < A.length - 1; i++) {
leftSum += A[i]
let rightSum = totalSum - leftSum
let diff = Math.abs(leftSum - rightSum)
minDiff = Math.min(minDiff, diff)
}
return minDiff
}시간 복잡도
totalSum계산: O(N)for루프: O(N)- 전체: O(N)
테스트
typescript
console.log(solution([3, 1, 2, 4, 3])) // 출력: 1
console.log(solution([-10, 10])) // 출력: 20
console.log(solution([1, 2, 3, 4, 5])) // 출력: 3