Notice
Recent Posts
Recent Comments
Link
«   2025/07   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

개발 일지

316. Remove Duplicate Letters (중복된 글자 제거) 본문

코딩 테스트/LeetCode

316. Remove Duplicate Letters (중복된 글자 제거)

포카리tea 2024. 9. 26. 15:39

이진 문자열 s에서도 0과 1의 개수가 같은 비어 있지 않은 서브스트링의 개수를 반환하고, 이러한 서브스트링의 모든 0과 1이 연속적으로 그룹화됩니다.

여러 번 발생하는 서브스트레이트는 발생 횟수로 계산됩니다.

 

예시 1:

입력: s = "00110011"
출력: 6
설명: 연속 1과 0의 개수가 같은 6개의 서브스트레이트가 있습니다: "0011", "01", "1100", "10", "0011", "01"입니다.
이러한 서브스트링 중 일부는 반복되며 발생 횟수로 계산됩니다.
또한 "00110011"은 모든 0(및 1)이 함께 그룹화되지 않았기 때문에 유효한 하위 문자열이 아닙니다.

 

예시 2:

입력: s = "10101"
출력: 4
설명: "10", "01", "10", "01"은 연속 1과 0의 개수가 같은 4개의 서브스트링이 있습니다.

 

 

 

조건:

  • 1 <= s.length <= 10^5
  • s[i] is either '0' or '1'.

 

정답:

public class Solution {
    public int CountBinarySubstrings(string s) {
        int result = 0;
        int count = 1;
        int check = 1;

        for (int i = 1; i < s.Length; i++)
        {
            if (s[i] == s[i - 1])
            {
                count += 1;
            }
            else
            {
                check = count;
                count = 1;
            }

            if (check >= count)
            {
                result += 1;
            }
        }
  
        return result;
    }
}

해설: count는 동일한 숫자일 경우에 갯수를 추가하고 숫자가 바뀔 때 해당 count를 check에 넘겨준 이후 count는 1로 초기화해줍니다.

넘겨받은 check가 바뀐 숫자인 count보다 동일하거나 크다면 계속 반복되고 있다는 경우이므로 check가 끝날때까지 result를 더해준 후 return해줍니다.