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 |