-
[백준/BOJ] 1439번 뒤집기 (C++)알고리즘 문제풀이/백준 2021. 8. 19. 15:53
https://www.acmicpc.net/problem/1439
그리디 유형의 문제, 전부 0으로 바꾸는 경우와 전부 1로 바꾸는 경우를 모두 구하여 횟수가 적은 경우를 출력한다.
이때 입력의 문자열이 전부 0 혹은 1인 경우는 바꿀 필요가 없으므로 예외처리를 해준다.
#include <iostream> #include <algorithm> using namespace std; int main(void) { ios_base::sync_with_stdio(false); cin.tie(0); // 0과 1의 갯수 // 0을 바꾸는 횟수와 1을 바꾸는 횟수 int zero = 0, one = 0, count_zero = 0, count_one = 0; string s; cin >> s; // 0과 1이 각각 몇개 나오는지 확인 for(int i = 0; i < s.size(); i++) { if(s[i] == '0') zero++; else one++; } // 문자열이 전부 0이거나 1이면 바꿀 필요가 없음 if(zero == 0 || one == 0) { cout << 0; return 0; } // 0을 바꾸는 경우 for(int i = 0; i < s.size(); i++) { if(s[i] == '0') { int j = i; while(s[j] == '0') { j++; } i = j - 1; count_zero++; } } // 1을 바꾸는 경우 for(int i = 0; i < s.size(); i++) { if(s[i] == '1') { int j = i; while(s[j] == '1') { j++; } i = j - 1; count_one++; } } // 0을 바꾸는 횟수와 1을 바꾸는 횟수의 최소값 출력 cout << min(count_zero, count_one); }
#include <iostream> #include <vector> #include <sstream> #include <algorithm> using namespace std; int main(void) { ios_base::sync_with_stdio(false); cin.tie(0); string str, token; cin >> str; stringstream ss1(str); vector<string> zero, one; while(getline(ss1, token, '1')) { if(token != "") zero.push_back(token); } stringstream ss2(str); while(getline(ss2, token, '0')) { if(token != "") one.push_back(token); } cout << min(zero.size(), one.size()); }
'알고리즘 문제풀이 > 백준' 카테고리의 다른 글
[백준/BOJ] 11047번 동전 0 (C++) (0) 2021.09.12 [백준/BOJ] 18428번 감시 피하기 (C++) (0) 2021.08.31 [백준/BOJ] 1766번 문제집 (C++) (0) 2021.08.17 [백준/BOJ] 1436번 영화감독 숌 (C++) (0) 2021.04.12 [백준/BOJ] 17070번 파이프 옮기기 (C++) (0) 2021.03.28