알고리즘/boj

BOJ 1439 뒤집기

칼퇴시켜주세요 2023. 1. 14. 20:48
728x90

이 문제는 0을 뒤집거나 1을 뒤집어서 최소한의 뒤집기로 같은 숫자를 만드는 문제이다. 따라서 0과 1이 바뀌는 구간을 기준으로 0인 구간의 갯수과 1인 구간의 갯수중 최소인 숫자를 뒤집으면 답이된다. 

 

예를들어 0001100의 경우 0의 구간은 앞쪽 000, 뒷쪽 00으로 총 2번 뒤집어야한다. 하지만 1의 구간의 경우 가운데 11으로 1번만 뒤집으면 된다. 따라서 최소한으로 뒤집어야하는 횟수는 1이 된다.

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

int main()
{
	ios_base::sync_with_stdio(false);
	cin.tie(NULL);

	string s;

	cin >> s;

	int oneCnt = 0, zeroCnt = 0;

	for(int i = 0; i < s.size() - 1; i++)
	{
		if(s[0] == '1')
		{
			oneCnt++;
		}
		else
		{
			zeroCnt++;
		}

		if(s[i] != s[i + 1])
		{
			if(s[i] == '0')
			{
				oneCnt++;
			}
			else
			{
				zeroCnt++;
			}
		}
	}

	cout << min(oneCnt, zeroCnt);
}
반응형

'알고리즘 > boj' 카테고리의 다른 글

BOJ 1911 흙길 보수하기  (2) 2023.01.17
BOJ 1016 제곱 ㄴㄴ 수  (0) 2023.01.17
BOJ 1789 수들의 합  (0) 2023.01.13
BOJ 1114 통나무 자르기  (0) 2023.01.13
BOJ 11047 동전 0  (0) 2023.01.05