문제링크 : https://www.acmicpc.net/problem/17615
#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define MAX 987654321
#define pii pair <int, int>
int main()
{
int N,R_cnt=0,B_cnt=0;
string s;
cin>>N>>s;
for(int i=0; i<s.size(); i++)
{
if(s[i]=='R')R_cnt++;
else B_cnt++;
}
int cnt1=0, cnt2=0, cnt3=0, cnt4=0, idx=0;
while(s[idx++]=='R'){cnt1++;} //좌측에 R 모으기
idx=N-1;
while(s[idx--]=='R'){cnt2++;} //우측에 R 모으기
idx=0;
while(s[idx++]=='B'){cnt3++;} //좌측에 B 모으기
idx=N-1;
while(s[idx--]=='B'){cnt4++;} //우측에 B 모으기
cout<<min({R_cnt-cnt1, R_cnt-cnt2, B_cnt-cnt3, B_cnt-cnt4});
}
경우의 수가 이렇게 총 4가지이다.
좌측에 R 모으기 / 우측에 R 모으기
좌측에 B 모으기 / 우측에 B 모으기
탐색 시작위치를 배열의 가장 왼쪽과 가장 오른쪽 이렇게 2군데를 잡는다.
각각에 위치에서 탐색할때 현재 값을 카운팅하다가 현재 값과 다른 값이 나온다면 카운팅을 멈추고 총 갯수에서 카운팅된 수를 빼면 넘겨야 할 수가 나온다.
'백준 > 실버' 카테고리의 다른 글
[백준 13335번] 트럭 (C++) (0) | 2023.05.13 |
---|---|
[백준 16943번] 숫자 재배치 (C++) (0) | 2023.05.09 |
[백준 18310번] 안테나 (C++) (0) | 2023.05.05 |
[백준 16194번] 카드 구매하기 2 (C++) (0) | 2023.05.04 |
[백준 12789번] 도키도키 간식드리미 (0) | 2023.05.02 |