[leetcode] Minimum Changes To Make Alternating Binary String

.·2021년 8월 18일
0

easy 1758. Minimum Changes To Make Alternating Binary String

코드

  • 실패

    public int minOperations(String str) {
        StringBuilder builder = new StringBuilder(str);
        int length = str.length();
        int count = 0;
        int first = builder.charAt(0) - '0', second;
    
        for (int i = 1; i < length; i++) {
            second = builder.charAt(i) - '0';
            if (first == second) {
                if (second == 1) {
                    builder.setCharAt(i, '0');
                } else {
                    builder.setCharAt(i, '1');
                }
                count++;
            }
    
            first = builder.charAt(i) - '0';
        }
    
        return count;
    }
    • 첫 글자부터 순서대로 두개씩 묶어서 (first, second)
    • first==second 이면 second를 다른 글자로 바꾼다.
    • StringBuilder.setCharAt(index, '-')를 사용하면 문자열에서 특정 인덱스의 문자를 바꿀 수 있다.
  • 성공

    public int minOperations(String str) {
        int length = str.length();
        int even = 0, odd = 0;
        for (int i = 0; i <length; i++) {
            int x = str.charAt(i) - '0';
            if (i % 2 == 0 && x == 1) {
                even++;
            } else if (i % 2 == 1 && x == 0) {
                odd++;
            }
        }
    
        return Math.min(length - (odd + even), odd + even);
    }
    • Runtime: 2 ms, Memory: 39.2 MB
    • 결과는 무조건 01010101... 혹은 101010...이다.
    • even: 짝수번째 글자가 0인 경우의 수
    • odd: 홀수번째 글자가 1인 경우의 수
    • length - (odd + even): 1010..로 바꿀 때 필요한 연산의 수
    • odd + even: 0101..으로 바꿀 때 필요한 연산의 수

0개의 댓글