문제
문제 바로가기> BOJ 17615번: 볼 모으기
풀이
크게는 총 2가지 경우가 있고, 그 안에서 또 2가지로 나뉘어 총 다음과 같은 4가지 경우가 있다.
1. 빨간 볼을 움직이는 경우
- 왼쪽으로 움직이는 경우
- 오른쪽으로 움직이는 경우
2. 파란 볼을 움직이는 경우
- 왼쪽으로 움직이는 경우
- 오른쪽으로 움직이는 경우
위 4가지 경우에서 최솟값을 찾아주면 되는 간단한 문제였다 ㅎㅎ
처음에 너무 복잡하게 생각하려고 하다보니 오히려 어렵게 느껴졌었다 ,,
#include<iostream>
#include<string>
using namespace std;
int main() {
ios_base::sync_with_stdio(0); cin.tie(0);
int N; cin >> N;
string balls; cin >> balls;
int ans = 500001, idx, move;
// move blue →
idx=N-1; move=0;
while(balls[idx]=='B') idx--;
for(int i=0; i<idx; i++){ if(balls[i]=='B') move++; }
ans = min(ans, move);
// move blue ←
idx=0; move=0;
while(balls[idx]=='B') idx++;
for(int i=idx; i<N; i++){ if(balls[i]=='B') move++; }
ans = min(ans, move);
// move red →
idx=N-1; move=0;
while(balls[idx]=='R') idx--;
for(int i=0; i<idx; i++){ if(balls[i]=='R') move++; }
ans = min(ans, move);
// move red ←
idx=0; move=0;
while(balls[idx]=='R') idx++;
for(int i=idx; i<N; i++){ if(balls[i]=='R') move++; }
ans = min(ans, move);
cout << ans;
}