문제
접근 방식
왼쪽 혹은 오른쪽으로 파란 공, 빨간 공을 모을 4가지 경우의 수를 모두 구한다
예를 들어 왼쪽으로 파란 공을 모을 경우 가장 왼쪽부터 하나씩 검사하여 처음으로 빨간 공이 나왔을 때 이후 부터 파란 공을 센다
코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
public class Main_17615 {
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
String balls = br.readLine();
int cnt = Integer.MAX_VALUE;
// 왼쪽으로 빨간 공 모으기
int subCnt = 0;
boolean sw = false;
for(int i=0;i<N;i++) {
if(sw && balls.charAt(i) == 'R') {
subCnt++;
continue;
}
if(balls.charAt(i) == 'B') sw = true;
}
cnt = Math.min(cnt, subCnt);
// 왼쪽으로 파란 공 모으기
subCnt = 0;
sw = false;
for(int i=0;i<N;i++) {
if(sw && balls.charAt(i) == 'B') {
subCnt++;
continue;
}
if(balls.charAt(i) == 'R') sw = true;
}
cnt = Math.min(cnt, subCnt);
// 오른쪽으로 빨간 공 모으기
subCnt = 0;
sw = false;
for(int i=N-1;i>=0;i--) {
if(sw && balls.charAt(i) == 'R') {
subCnt++;
continue;
}
if(balls.charAt(i) == 'B') sw = true;
}
cnt = Math.min(cnt, subCnt);
// 오른쪽으로 파란 공 모으기
subCnt = 0;
sw = false;
for(int i=N-1;i>=0;i--) {
if(sw && balls.charAt(i) == 'B') {
subCnt++;
continue;
}
if(balls.charAt(i) == 'R') sw = true;
}
cnt = Math.min(cnt, subCnt);
System.out.println(cnt);
}
}