
😎풀이
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
}