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을 해보니
정답이었다!