티스토리 뷰

백준/실버

[백준 17615번] 볼 모으기 (C++)

게임개발기원 2023. 5. 7. 17:37

문제링크 : https://www.acmicpc.net/problem/17615

 

17615번: 볼 모으기

첫 번째 줄에는 볼의 총 개수 N이 주어진다. (1 ≤ N ≤ 500,000) 다음 줄에는 볼의 색깔을 나타내는 문자 R(빨간색 볼) 또는 B(파란색 볼)가 공백 없이 주어진다. 문자열에는 R 또는 B 중 한 종류만 주

www.acmicpc.net

#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군데를 잡는다.

각각에 위치에서 탐색할때 현재 값을 카운팅하다가 현재 값과 다른 값이 나온다면 카운팅을 멈추고 총 갯수에서 카운팅된 수를 빼면 넘겨야 할 수가 나온다.

 

 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/07   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
글 보관함