본문 바로가기
LeetCode/Array & Hashing

[LeetCode][Kotlin] 1758. Minimum Changes To Make Alternating Binary String

by jinwo_o 2024. 8. 20.

1758. Minimum Changes To Make Alternating Binary String

You are given a string s consisting only of the characters '0' and '1'. In one operation, you can change any '0' to '1' or vice versa.

 

The string is called alternating if no two adjacent characters are equal. For example, the string "010" is alternating, while the string "0100" is not.

 

Return the minimum number of operations needed to make s alternating.

문자 '0'과 '1'로만 구성된 문자열 s가 제공됩니다. 한 번의 작업으로 '0'을 '1'로 또는 그 반대로 변경할 수 있습니다. 

인접한 두 문자가 동일하지 않으면 문자열을 교대라고 합니다. 예를 들어 문자열 "010"은 교대로 표시되지만 문자열 "0100"은 교대로 표시되지 않습니다. 

s를 교대로 만드는 데 필요한 최소 작업 수를 반환합니다.

 

Example 1:

Input: s = "0100"

Output: 1

Explanation: If you change the last character to '1', s will be "0101", which is alternating.

 

Example 2:

Input: s = "10"

Output: 0

Explanation: s is already alternating.

 

Example 3:

Input: s = "1111"

Output: 2

Explanation: You need two operations to reach "0101" or "1010".

 

Constraints:

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

코드

  • 0 과 1 이 교대로 나타나기 위해서는 인덱스를 기준으로 짝수와 홀수로 구분되어야 한다.
  • 하지만 어떤 값이 짝수 번째인지 홀수 번째인지 미리 알 수 없다.
  • 만약 0을 홀수 번째에 배치한다면, 반대의 경우(0이 짝수 번째인 경우)는 전체 문자열 길이에서 변경 횟수를 빼주면 된다.
class Solution {
    fun minOperations(s: String): Int {
        var count = 0

        for (i in s.indices) {
            if (i % 2 == 0) {
                if (s[i] == '0') {
                    count++
                }
            } else {
                if (s[i] == '1') {
                    count++
                }
            }
        }

        return minOf(count, s.length - count)
    }
}