
😎풀이
group
: 0
과 1
의 연속된 수가 모여 있는 배열
count
: 0
또는 1
의 수를 카운트 하는 변수
s
순회하며 연속된 0
또는 1
의 수 카운트
- 인접한 두
group
중 최소 수 만큼이 결합 가능한 최소의 수 이므로 카운트
4-1. 예를 들어, 0
과 111
이 인접한 두 그룹이라면, 가능한 경우는 01
1개 밖에 존재하지 않음
4-2. 00
과 11
이 인접한 두 그룹이라면, 01
과 0011
2개 생성 가능
4-3. 이런 구조로 최소 길이의 그룹이 결합 가능한 최대 수임
function countBinarySubstrings(s: string): number {
const groups = []
let count = 1
for (let i = 1; i < s.length; i++) {
if (s[i] === s[i - 1]) {
count++
} else {
groups.push(count)
count = 1
}
}
groups.push(count);
let result = 0
for (let i = 1; i < groups.length; i++) {
result += Math.min(groups[i - 1], groups[i])
}
return result
}