코테/Greedy
[C/C++] 백준 1439, Greedy
상똥
2023. 2. 6. 17:07
문제
코드
#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보다 작을 동안 반복한다.