알고리즘/그리디 알고리즘

[백준] 1439 - 뒤집기

TIM_0529 2023. 2. 1. 15:44
반응형
//#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