백준 1439 : 뒤집기

혀니앤·2022년 7월 5일
0

C++ 알고리즘

목록 보기
112/118

https://www.acmicpc.net/problem/1439

1. 접근

  • 처음엔 어딜 먼저 뒤집어야할지 모르니까 BFS로 경로탐색을 해야 한다고 생각했다
  • 그러나 메모리 부족.. 1010 이 반복되는 길이 100의 문자열을 넣어 실행해보니 128MB가 훌쩍 넘었다
  • 그래서 BFS가 아니라 더 단순하게 풀어야겠다는 생각이 듦
    => 이제보니, 100011100011 의 답이 2인 이유는, 1 덩어리가 3개, 0덩어리가 2개이므로 0덩어리들만 2번 뒤집어주면 되기 때문이다..!
  • 다시 말해, 덩어리들을 카운트하고, 더 작은 수를 리턴해주면 된다.

2. 나의 풀이

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

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

	string str;
	cin >> str;

	int countArr[2]={0,0};
	int comp = str[0];
	countArr[str[0] - '0']++;
	for (int i = 1; i < str.length(); i++) {
		if (str[i] != comp) {
			comp = str[i];
			countArr[str[i] - '0']++;
		}
	}
	
	cout << min(countArr[0], countArr[1]) << "\n";
}

3. 다른 사람의 풀이

https://tooo1.tistory.com/247
이 사람은 i와 i+1의 숫자가 다른 경우만 세주어 풀었다.
코드가 가장 간결하고 좋지만, 이해하기에는 어려운 코드인 것 같다

profile
일단 시작하기

0개의 댓글