PS_Baekjoon

[백준 C++] 1439번 : 뒤집기

SMILELY 2023. 2. 27. 22:39

https://www.acmicpc.net/problem/1439

 

1439번: 뒤집기

다솜이는 0과 1로만 이루어진 문자열 S를 가지고 있다. 다솜이는 이 문자열 S에 있는 모든 숫자를 전부 같게 만들려고 한다. 다솜이가 할 수 있는 행동은 S에서 연속된 하나 이상의 숫자를 잡고 모

www.acmicpc.net

풀이 :

- 모든 숫자를 같게 만들기 위한 최소값을 구해야 함

- 연속된 0과 연속된 1의 갯수를 구하고 그 중 더 작은 수가 답

 

코드 : 

#include <iostream>
using namespace std;

int main() {
    int cntZero, cntOne;
    string s;
    
    cin >> s;
    cntZero = cntOne = 0;
    if(s[0] == '0'){ // for문을 1부터 시작해서 i-1값을 비교함
        cntZero++;  //i가 0일 때 out of bounds를 방지하기 위해 인덱스 0은 따로 고려
    }else{
        cntOne++; 
    }
    for(int i=1; i<s.size(); i++){
        if(s[i] == '0' && s[i-1] != '0'){ //연속되지 않을 경우 카운트
            cntZero++;
        }else if(s[i] == '1' && s[i-1] != '1'){
            cntOne++;
        }
    }
    cout << min(cntOne, cntZero) << endl; // 둘 중 최소값 출력
}