TapeEquilibrium ๋ฌธ์ ํด๊ฒฐ (Codility) โ
๋ฌธ์ ์ค๋ช โ
๋ฐฐ์ด A
๊ฐ ์ฃผ์ด์ก์ ๋, ๋ฐฐ์ด์ ๋ ๋ถ๋ถ์ผ๋ก ๋๋ ํ ๋ ๋ถ๋ถ์ ํฉ์ ์ฐจ์ด(์ ๋๊ฐ)๋ฅผ ์ต์ํํ๋ ๋ฌธ์ ์
๋๋ค.
์์ โ
typescript
A = [3, 1, 2, 4, 3]
๊ฒฐ๊ณผ: 1
ํด๊ฒฐ ์ ๊ทผ ๋ฐฉ์ โ
์ด ๋ฌธ์ ๋ Prefix Sum (๋์ ํฉ) ์ ํ์ฉํ์ฌ O(N) ์๊ฐ ๋ณต์ก๋๋ก ํด๊ฒฐํ ์ ์์ต๋๋ค.
๋ฐฐ์ด์ ์ ์ฒด ํฉ(totalSum) ๊ตฌํ๊ธฐ
- ๋ฐฐ์ด์ ๋ชจ๋ ์์๋ฅผ ํฉ์ฐํ์ฌ
totalSum
์ ๊ตฌํฉ๋๋ค.
- ๋ฐฐ์ด์ ๋ชจ๋ ์์๋ฅผ ํฉ์ฐํ์ฌ
์ผ์ชฝ ๋ถ๋ถ ํฉ(leftSum)๊ณผ ์ต์ ์ฐจ์ด ๊ณ์ฐ
- ๋ฐฐ์ด์ ํ ์์์ฉ ์ํํ๋ฉฐ
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
๊ฒฐ๋ก โ
- ์ด ๋ฐฉ๋ฒ์ ์ฌ์ฉํ๋ฉด ํจ์จ์ ์ผ๋ก ์ต์ ์ฐจ์ด๋ฅผ ๊ตฌํ ์ ์์ต๋๋ค. ๐ฏ
O(N)
์ผ๋ก ์ต์ ํ๋ ์ ๊ทผ ๋ฐฉ์์ผ๋ก Codility ํ ์คํธ๋ฅผ ํต๊ณผํ ์ ์์ต๋๋ค. โ