문제 링크
1439번: 뒤집기
풀이
- 먼저 0의 구역 개수와 1의 구역 개수를 세는
fCnt
, tCnt
- 맨 처음 글자에 따라 영역 시작 개수를 센다.
- 그 다음 글자부터 끝까지 체크를 하는데, 현재 글자가 이전 글자(영역)
c
와 다를 경우 구역이 나누어지기 때문에 해당 글자의 영역 개수를 추가하고 이전 글자(영역) c
를 갱신한다.
- 그렇게 만들어진
fCnt
와 tCnt
값 중 작은 값을 출력
코드
#include <iostream>
#include <string>
using namespace std;
int main()
{
string s="";
cin >> s;
int fCnt = 0;
int tCnt = 0;
char c = s[0];
if (c == '0')
{
fCnt++;
}
else
{
tCnt++;
}
for (int i = 1; i < s.size(); i++)
{
if (s[i] != c)
{
if (s[i] == '0') fCnt++;
else tCnt++;
c = s[i];
}
}
int answer = fCnt > tCnt ? tCnt : fCnt;
cout << answer << endl;
return 0;
}