
알고리즘 분류 : 그리디
난이도 : 실버1
출처 : 백준 - 볼 모으기




정답이 될 수 있는 경우는 4가지이다.
R을 왼쪽으로 모으는 경우, R을 오른쪽으로 모으는 경우, B을 왼쪽으로 모으는 경우, B을 오른쪽으로 모으는 경우
전체 공 갯수를 계산한 후 앞에서부터 다시 공 갯수를 카운트 한다.
이때 R혹은 B가 전부 카운트 됬을때의 공 갯수를 구한다.
반대로 카운트했을때도 계산한다.
4개의 값 중 가장 작은 값이 답이다.
import java.util.*;
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
String line = br.readLine();
int min;
int rCnt = 0, bCnt=0;
for(int i=0;i<N;i++) {
if(line.charAt(i)=='R')rCnt++;
else bCnt++;
}
int currentRCnt = 0, currentBCnt = 0;
for(int i=0;i<N;i++) {
if(line.charAt(i)=='R')currentRCnt++;
else currentBCnt++;
if(currentBCnt==bCnt || currentRCnt == rCnt)
break;
}
min = Integer.min(currentRCnt, currentBCnt);
currentRCnt = 0;
currentBCnt =0;
for(int i=N-1;i>=0;i--) {
if(line.charAt(i)=='R')currentRCnt++;
else currentBCnt++;
if(currentBCnt==bCnt || currentRCnt == rCnt)
break;
}
min = Integer.min(min , Integer.min(currentRCnt, currentBCnt));
System.out.println(min);
}
}

모든 경우를 전부 구하는 방식으로 계산했다. 반복문이 크지 않아서 정답을 구할 수 있었다.