1의 부분배열을 전부 구해야하는 문제. 1의 연속된 길이를 구한 뒤 등차수열 기본공식을 적용하면 된다. 숫자가 너무 큰 경우 나누라는 지시가 있으므로 MOD 변수로 나눈 나머지를 더해주면 손쉽게 해결 가능하다.
const MOD = 1000000007;
function numSub(s: string): number {
let len = 0
let sum = 0
for (let i = 0; i < s.length; i++) {
if (s[i] === '1') {
len += 1
} else {
if (len !== 0) {
sum += (plus(len) % MOD)
len = 0
}
}
}
if (len !== 0) {
sum += (plus(len) % MOD)
}
return sum
};
function plus(n: number) {
return n * (n + 1) / 2
}
