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
'알고리즘 > 백준' 카테고리의 다른 글
[백준/c++] 19532번: 수학은 비대면강의입니다 (0) | 2022.07.13 |
---|---|
[백준/c++] 21314번: 민겸 수 (0) | 2022.07.13 |
[백준/c++] 1541번: 잃어버린 괄호 (0) | 2022.07.13 |
[백준/c++] 1931번: 회의실 배정 (0) | 2022.07.12 |
[백준/c++] 20300번: 서강근육맨 (0) | 2022.07.12 |