
😎풀이
- 누적합과 해시맵을 활용, 1은 +1 0은 -1을 의미하도록 누적합 계산
- 누적합 결과가 같은 두 인덱스 사이의 비트는 1과 0의 개수가 동일함
- 따라서, 누적합 결과가 같은 두 인덱스 사이의 거리를 계산하며 최대 거리를 갱신
- 갱신된 최대 거리 반환
function findMaxLength(nums: number[]): number {
const n = nums.length
const map = new Map<number, number>()
map.set(0, -1)
let maxLen = 0
let prefixSum = 0
for(let i = 0; i < n; i++) {
const val = nums[i] === 1 ? 1 : -1
prefixSum += val
if(!map.has(prefixSum)) {
map.set(prefixSum, i)
continue
}
const prevIdx = map.get(prefixSum)
const curLen = i - prevIdx
maxLen = Math.max(maxLen, curLen)
}
return maxLen
};