문제 링크입니다: https://www.acmicpc.net/problem/1439
1439번: 뒤집기
다솜이는 0과 1로만 이루어진 문자열 S를 가지고 있다. 다솜이는 이 문자열 S에 있는 모든 숫자를 전부 같게 만들려고 한다. 다솜이가 할 수 있는 행동은 S에서 연속된 하나 이상의 숫자를 잡고 모두 뒤집는 것이다. 뒤집는 것은 1을 0으로, 0을 1로 바꾸는 것을 의미한다. 예를 들어 S=0001100 일 때, 전체를 뒤집으면 1110011이 된다. 4번째 문자부터 5번째 문자까지 뒤집으면 1111111이 되어서 2번 만에 모두 같은 숫자로 만들 수 있
www.acmicpc.net
연속된 0을 뒤집는 경우와 연속된 1을 뒤집는 경우 모두 구하여 최소인 쪽을 출력을 해주면 되는 문제였습니다.
코드가 중복되기 때문에 함수로 빼는 것이 더 좋을 것 같습니다.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <iostream> | |
#include <string> | |
#include <algorithm> | |
using namespace std; | |
int main(void) | |
{ | |
ios_base::sync_with_stdio(0); | |
cin.tie(0); | |
string s; | |
cin >> s; | |
int cnt = 0; | |
bool flag = false; | |
for (int i = 0; i < s.length(); i++) | |
{ | |
if (s[i] == '1') | |
{ | |
if (flag) | |
{ | |
cnt++; | |
flag = false; | |
} | |
continue; | |
} | |
flag = true; | |
} | |
if (flag) | |
{ | |
cnt++; | |
} | |
int cnt2 = 0; | |
flag = false; | |
for (int i = 0; i < s.length(); i++) | |
{ | |
if (s[i] == '0') | |
{ | |
if (flag) | |
{ | |
cnt2++; | |
flag = false; | |
} | |
continue; | |
} | |
flag = true; | |
} | |
if (flag) | |
{ | |
cnt2++; | |
} | |
cout << min(cnt, cnt2) << "\n"; | |
return 0; | |
} |


개발환경:Visual Studio 2017
지적, 조언, 질문 환영입니다! 댓글 남겨주세요~
반응형
'알고리즘 > BOJ' 카테고리의 다른 글
백준 1758번 알바생 강호 (0) | 2019.11.08 |
---|---|
백준 1343번 폴리오미노 (0) | 2019.11.08 |
백준 1041번 주사위 (2) | 2019.11.08 |
백준 2812번 크게 만들기 (4) | 2019.11.08 |
백준 17829번 222-풀링 (0) | 2019.11.04 |