티스토리 뷰

카테고리 없음

3427 볼 모으기 (정올)

rectified 2024. 12. 9. 13:12

풀이 생각 과정

red count 와 blue count를 지정해줘서 카운터를 올려줘야 하는데, 

같은 색깔만 이동할수 있다고 했으니 색이 다르면 break 하고 

start 카운터와 end카운터 각각 지정한 다음

반복문 증가순회할때 start증가, 그리고 감소순회할때 end증가 하는식으로 가면 됨.

코드

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

int main() {
    int n;
    string arr;
    
    cin >> n >> arr;

    int red = 0, blue = 0;
    int rs = 0, bs = 0, re = 0, be = 0;

    
    for (int i = 0; i < n; ++i) {
        if (arr[i] == 'R') red++;
        else blue++;
    }

    
    for (int i = 0; i < n; ++i) {
        if (i == 0) {
            if (arr[i] == 'R') rs = 1;
            else bs = 1;
        } else if (arr[i] != arr[i - 1]) {
            break;
        } else {
            if (arr[i] == 'R') rs++;
            else bs++;
        }
    }

    for (int i = n - 1; i >= 0; --i) {
        if (i == n - 1) {
            if (arr[i] == 'R') re = 1;
            else be = 1;
        } else if (arr[i] != arr[i + 1]) {
            break;
        } else {
            if (arr[i] == 'R') re++;
            else be++;
        }
    }
    

    // 최소 이동 횟수 계산
    int val = red - rs;
    val = min(val, red - re);
    val = min(val, blue - bs);
    val = min(val, blue - be);

    // 결과 출력
    cout << val << endl;

    return 0;
}
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/01   »
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
글 보관함