😎풀이

  1. group: 01의 연속된 수가 모여 있는 배열
  2. count: 0 또는 1의 수를 카운트 하는 변수
  3. s 순회하며 연속된 0 또는 1의 수 카운트
  4. 인접한 두 group 중 최소 수 만큼이 결합 가능한 최소의 수 이므로 카운트
    4-1. 예를 들어, 0111이 인접한 두 그룹이라면, 가능한 경우는 01 1개 밖에 존재하지 않음
    4-2. 0011이 인접한 두 그룹이라면, 010011 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
}
profile
내 지식을 공유할 수 있는 대담함

0개의 댓글