[C/C++] BOJ(백준) 1439 "뒤집기" 문제 풀이 & 소스 코드

반응형
반응형

#문제정보

출처 : www.acmicpc.net/problem/1439

 

#문제분석

사용된 알고리즘 : 그리디(GREEDY)

간단한 문제이다. 0이 나오는 영역과 1이 나오는 영역을 비교하여, 더 작은 영역을 출력하면  된다.

 

0001100이 입력되었다고 가정해 보면 0의 영역 = 2 , 1의 영역 = 1 이므로 1의 영역을 출력한다.

01001100이 입력되었다고 가정해 보면 0의 영역 = 3 , 1의 영역 = 2 이므로 1의 영역을 출력한다.

단, 조심해야 할 부분은

if (numstr[i] != numstr[i+1])
{
	if (numstr[i] == '0') zeroarea++;
	else onearea++;
}

if (문자열[i] != 문자열[i+1]) 조건문 부분인데, i번째 인덱스와 i+1번째 인덱스가 다른 경우에만 카운트를 해야한다는 것만 조심하면 된다.

 

#소스코드

#include <iostream>
#include <string>
#include <algorithm>
using namespace std;

int zeroarea;
int onearea;

int main()
{
	string numstr;
	cin >> numstr;
	
	for (int i = 0 ; i < numstr.size() ; ++i)
	{
		if (numstr[i] != numstr[i+1])
		{
			if (numstr[i] == '0') zeroarea++;
			else onearea++;
		}
	}
	
	cout << min(zeroarea,onearea);
	return 0;
}
반응형

댓글

Designed by JB FACTORY