https://www.acmicpc.net/problem/20365
20365번: 블로그2
neighbor 블로그를 운영하는 일우는 매일 아침 풀고 싶은 문제를 미리 정해놓고 글을 올린다. 그리고 매일 밤 각각의 문제에 대하여, 해결한 경우 파란색, 해결하지 못한 경우 빨간색으로 칠한
www.acmicpc.net
풀이 :
- 연속적인 문제를 칠하는 횟수는 1번이다
ex) RRR은 R이 3개지만, 연속되어 있기 때문에 칠하는 횟수는 1번
- 연속되어있는 R의 갯수와, B의 갯수를 구한 뒤,
더 많은 값의 문제들은 한번에 칠하고, 적은 값의 문제는 한 블럭씩 칠해야 최솟값을 구할 수 있다
코드 :
#include <iostream>
#include <algorithm>
#include <string>
using namespace std;
int main(){
cin.tie(NULL);
ios::sync_with_stdio(false);
int n, red, blue, cnt = 0;
bool color = false; //어떤 색을 카운트할지 알려줄 변수
string s;
cin >> n >> s;
red = blue = 0;
if(s[0] == 'R'){ //나중에 카운트하기 쉽게 0번째 인덱스가 R이라면
color = true; //true값으로 변경
}
for(int i=1; i<n; i++){
if(s[i] == 'R'){
if(!color){ //R인데 color가 false라면 이전 인덱스의 값이 B라는 것
blue++; //blue를 카운트해준다
color = true; //true로 변경
} //다음 값이 R이 나와도 color가 true이기 때문에 아무 일도 일어나지 않는다
}else{
if(color){
red++;
color = false;
}
}
}
if(s[n-1] == 'R'){ //마지막 값은 반복문 안에서 처리가 안되기 때문에 따로 계산
red++;
}else{
blue++;
}
cout << min(red,blue)+1 << '\n'; //최솟값 더하기 1(전체를 칠하는 횟수 한 번)을 출력
}
'PS_Baekjoon' 카테고리의 다른 글
[백준 C++] 12789번 : 도키도키 간식드리미 (0) | 2023.03.27 |
---|---|
[백준 C++] 11899번 : 괄호 끼워넣기 (0) | 2023.03.26 |
[백준 C++] 21921번 : 블로그 (0) | 2023.03.24 |
[백준 C++] 16165번 : 걸그룹 마스터 준석이 (1) | 2023.03.23 |
[백준 C++] 1475번 : 방 번호 (1) | 2023.03.22 |