본문 바로가기

algorithm/Greedy

[C++] BOJ 1439 뒤집기

www.acmicpc.net/problem/1439

 

1439번: 뒤집기

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

www.acmicpc.net

코드

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

int main() {
	string str;
	int num0 = 0, num1 = 0;
	cin >> str;

	str[0] == '0' ? num0++ : num1++;

	for (int i = 1; i < str.size(); i++) {
		if (str[i] != str[i - 1]) {
			str[i] == '0' ? num0++ : num1++;
		}
	}
	cout << min(num0, num1);
}

고민과정

- 0으로 된 덩어리를 A, 1으로 된 덩어리를 B라고 했을 때,

  ABABA → AABAA → AAAAA

  ABABAB → AABABA → AAABAA → AAAAAA

  이런식으로 뒤집어도 되지 않을까? 라는 생각이 들었지만 곧 결과는 똑같다는걸 깨달았다.



- 실수형 입출력에 너무 익숙해진 나머지 '0'을 0이라고 써놓고 제대로 결과가 안나와서 잠시 당황하기도 했다..ㅎㅎ



- 굳이 그리디를 쓰지 않더라도, 단순히 변화횟수를 센 뒤 홀짝에 따라 다른 값을 출력하는 것도 가능할 것 같다.

'algorithm > Greedy' 카테고리의 다른 글

[C++] BOJ 1715 카드 정렬하기  (0) 2021.11.16
[C++] BOJ 11047 동전 0  (0) 2021.03.27
[C++] BOJ 12782 비트 우정지수  (0) 2021.03.27
[C++] BOJ 11256 사탕  (0) 2021.03.26
Greedy (탐욕) 알고리즘  (0) 2021.03.26