[LeetCode] Minimum Changes To Make Alternating Binary String

준규·2022년 8월 12일
0

0 과 1로만 이루어진 string s가 주어진다고 할 때

0은 1로 , 1은 0으로만 한번에 하나의 숫자만 바꿀 수가 있다고 한다

이러한 상황에서 s를 alternating으로 만들기 위해 숫자를 바꾸는 연산을 할때

연산횟수의 최솟값을 리턴하는 문제이다

여기서 alternating이란 인접한 어느 두 숫자도 같지 않은 상태를 말한다고 한다

예를 들면 10101010.... 이거나 010101010.... 인상태이다!

Example을 보면

일단 s의 길이가 1이라면 그냥 0을 리턴해주면 될것같았다

문제를 보니 alternating이 될 수 있는 경우는 010101... 같은 타입이거나

1010101.... 같은 타입 두가지밖에 없다

그리고 연산의 최대 횟수는 s의 길이이고 0101 타입으로 숫자를 바꾸려고 연산을 하게 되면 1010 타입이 되게 하는 연산은 s.length - count 인걸 알 수 있었고 이를 이용해보기로 하였다!

const minOperations = function(s) {
    let count = 0;
    if(s.length === 1) return 0;
    for(let i =0 ; i < s.length ; i++) {
        if(i % 2 === 0) {
            if(s[i] === '0') {
                count ++;
            }
        }else if(i % 2 === 1) {
            if(s[i] === '1'){
                count ++;
            }
        }
    }
    
    return Math.min(count, s.length - count)
};

나같은 경우 s의 짝수 인덱스의 숫자는 1로, 홀수 인덱스의 숫자는 0으로 바꾸는 연산을 하기로 했다.

(101010 타입) 연산의 값을 count라고 하면 (010101 타입)의 연산값은 s.length - count이다

둘중 어느 타입이든지 우리는 최소 연산값만 가져오면 되므로 둘중 최솟값을 리턴해주었다

Submit을 해보니

정답이었다!

profile
안녕하세요 :)

0개의 댓글