반응형
//#include <stdio.h>
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
#define _CRT_SECURE_NO_WARNINGS
using namespace std;
int main()
{
string s;
int z=0, o=0,c=0;
cin >> s;
char l = s[0];
bool check = false;
for (int i = 0; i < s.size(); i++)
{
if (check && s[i] != l)
{
c++;
/*cout << " ======= diff ====== " << endl;
cout << "s[i] = " << s[i] << endl;
cout << "l = " << l << endl;
cout << " ======= diff ====== " << endl;*/
//l = s[i];
check = false;
}
else if (s[i] == l)
check = true;
}
cout << c;
}
그리디 알고리즘으로 간단하게 푼 문제입니다.
시작 하는 첫 문자를 기준으로 해서 for 문을 돌면서 만나는 문자가 첫 문자와 다르다면 카운트 해 줍니다. 그리고 check 를 false로 설정해 비활성화 해 줍니다.
만약 첫 문자와 같은 문자가 나온다면 check 를 true 로 변경하여 다시 활성화 시켜줍니다.
이렇게 하면
연속되는 서로 숫자가 첫 문자와 다를시 계속 카운트 되는 오류를 피할 수 있습니다.
반응형
'알고리즘 > 그리디 알고리즘' 카테고리의 다른 글
[백준] 1049 - 기타줄 (0) | 2023.02.08 |
---|---|
[백준] 2863 - 5 와 6의 차이 (0) | 2023.02.05 |
[벡준] 13365 - 주유소 (0) | 2023.01.30 |
[백준] 1789 - 수들의 합 (0) | 2023.01.25 |
[백준] 10162 - 전자레인지 (0) | 2023.01.25 |