본문 바로가기
코테/Greedy

[C/C++] 백준 1439, Greedy

by 상똥 2023. 2. 6.

문제

1439번: 뒤집기 (acmicpc.net)

 

1439번: 뒤집기

다솜이는 0과 1로만 이루어진 문자열 S를 가지고 있다. 다솜이는 이 문자열 S에 있는 모든 숫자를 전부 같게 만들려고 한다. 다솜이가 할 수 있는 행동은 S에서 연속된 하나 이상의 숫자를 잡고 모

www.acmicpc.net

코드

#include <stdio.h>
#include <string>
#include <iostream>

using namespace std;

int main() {
	string S;
	cin >> S;
	int zero = 0, one = 0, index = 0;
	int temp1, temp2;

	temp1 = stoi(S.substr(index, 1));

	if (temp1 == 0)
		zero++;
	else
		one++;

	while (index < S.length() - 1) {
		temp1 = stoi(S.substr(index, 1));
		temp2 = stoi(S.substr(index + 1, 1));

		if (temp1 != temp2) {
			if (temp2 == 0)
				zero++;
			else
				one++;
		}
		index++;
	}
	cout << min(zero, one);
}

풀이

1. 입력받은 문자열을 한자리씩 숫자로 임시 저장할 변수 temp1, temp2를 선언한다. 또한 0과 1 묶음이 몇개씩 등장하는지 기록하기 위해 zero와 one 변수를 0으로 선언한다.

2. 첫 번째 문자를 정수형으로 변환하여 temp1에 저장한 후, 해당하는 숫자가 0이라면 zero를, 1이라면 one을 증가시킨다.

3. index변수를 사용해서 문자열의 index번째 문자와 index+1번째 문자를 비교한다.

4. 비교한 두 문자가 다를 경우, index+1번째에 해당하는 숫자의 수(zero 또는 one)를 하나씩 증가시킨다.

5. 3~4번 과정을 index가 문자열길이-1보다 작을 동안 반복한다.