본문 바로가기
알고리즘/백준 문제

17615 - 볼 모으기

by HDobby 2023. 7. 23.

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

 

17615번: 볼 모으기

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

www.acmicpc.net

생각해보기

  • 공은 왼쪽 혹은 오른쪽으로 몰 수 있다.
  • 오른쪽으로 한번 왼쪽으로 한번 진행하며 확인하자.

코드

#include<iostream>
#include<string>

using namespace std;

int N;
string balls;

void input(){
    cin>>N>>balls;
}

void solution(){
    bool rf = false, bf = false;
    int rc = 0, bc = 0;
    int ans = 987'654'321;

    for(int i=0;i<N;++i){
        if(balls[i] == 'R')
            bf = true;
        else
            rf = true;
        
        if(bf && balls[i] == 'B')
            ++bc;
        if(rf && balls[i] == 'R')
            ++rc;
    }

    ans = min(rc,bc);

    rf = false;
    bf = false;
    rc = 0, bc = 0;

    for(int i=N-1;i>=0;--i){
        if(balls[i] == 'R')
            bf = true;
        else
            rf = true;
        
        if(bf && balls[i] == 'B')
            ++bc;
        if(rf && balls[i] == 'R')
            ++rc;
    }

    ans = min(ans, min(rc, bc));

    cout<<ans<<'\n';
}

int main(){
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);

    input();
    solution();

    return 0;
}

728x90

'알고리즘 > 백준 문제' 카테고리의 다른 글

14719 - 빗물  (0) 2023.07.25
20437 - 문자열 게임 2  (0) 2023.07.24
24337 - 가희와 탑  (0) 2023.07.22
2531 - 회전 초밥  (0) 2023.07.22
22866 - 탑 보기  (0) 2023.07.21

댓글