[백준] 1439 : 뒤집기 C++

거북이·2022년 3월 17일
0

문제풀이

목록 보기
3/11

문제 링크


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

문제 풀이


입력으로 주어지는 문자열은 0과 1로 이루어져있고, 최소한의 행동으로 전부 같게 만들어야 한다. 한번 뒤집는 행동은 연속으로 이루어져있는 수를 한번에 뒤집을 수 있다.

그렇기 때문에 연속된 수를 묶어서 처리하기 위해 문자열을 순차적으로 탐색하면서, 연속이 끊긴 부분에 대해서 카운트를 해준다는 생각으로 문제에 접근하였고, map container를 이용하여 0과, 1의 연속된 수 집합의 개수를 저장하여 그 최솟값을 출력하도록 하였다.

정답 코드


#include<iostream>
#include<map>


using namespace std;

int main() {
	string str;
	map<char, int> consecutiveCnt; //연속된 수를 저장
	int answer; // 최소 횟수
	cin >> str;

	char temp = str[0]; // 이전값을 비교하기 위한 임시변수
	consecutiveCnt[temp]++; 

	//수가 바뀌면 해당값을 저장
	for (int i = 1; i < str.size(); i++) {
		if (temp != str[i]) {
			consecutiveCnt[str[i]]++;
			temp = str[i];
		}
	}

	//한번도 뒤집어진 적이 없는 경우
	if (consecutiveCnt.size() == 1) {
		cout << 0;
	}
	//최솟값
	else {

		answer = min(consecutiveCnt['0'], consecutiveCnt['1']);
		cout << answer;
	}
	
	return 0;
}

0개의 댓글

관련 채용 정보