알고리즘/백준

[백준/c++] 20365번: 블로그2

녕이 2022. 7. 13. 12:10
728x90

 

 

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

 

20365번: 블로그2

neighbor 블로그를 운영하는 일우는 매일 아침 풀고 싶은 문제를 미리 정해놓고 글을 올린다. 그리고 매일 밤 각각의 문제에 대하여, 해결한 경우 파란색, 해결하지 못한 경우 빨간색으로 칠한

www.acmicpc.net

 

어차피 동일한 색상을 연속으로 칠한다면 한 번에 칠하기 때문에 +1 해주면 된다.

그러므로 연속된 색상은 하나로 치는 코드가 필요하다. 문자를 받으면서

연속된 색상의 가장 첫번째 원소만 넣어주고 색상이 바뀔 때 배열 다음 원소에 해당 색상을 넣어준다.

 

한 번 덮고 더 많은 색상(연속이 끊긴 개수가 더 많은 색상)을 더해준 값을 출력한다.

 

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

int main(){
    ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
    char arr[500001];
    int n, ans = 0, size = 0, R = 0, B = 0;
    cin >> n;
    
    int pivot = 0;
    for(int i=0; i<n; i++){
        char c;
        cin >> c;
        
        if(i == 0){ //첫번째 원소의 경우만
            arr[pivot] = c;
            size++;
            pivot++; //어디서부터 연속되었는지 체크
        }else if(i!=0 && arr[pivot-1] != c){ //첫번째 원소가 아니고 이전 문자와 같지 않다면 arr 에 추가
            arr[pivot] = c;
            size++;
            pivot++;
        }
    }
    
    for(int i=0; i<size-1; i++){
        if(arr[i] == 'B') B++;
        else              R++;
    }
    
    if(B > R) ans += 1 + B;
    else      ans += 1 + R;
    cout << ans << '\n';
    return 0;
}

 

 

 

 

728x90