[백준 - 17615] 실버1 - 볼 모으기
알고리즘/백준

[백준 - 17615] 실버1 - 볼 모으기

www.acmicpc.net/problem/17615

 

17615번: 볼 모으기

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

www.acmicpc.net

 

1. 유형

그리디

 

2. 풀이

RRBRBB가 있을때, 맨 뒤에서 시작하는 경우와 맨 앞에서 시작하는 경우 두가지로 나눠서 생각한다.

 

RR부터 시작하면 뒤에R과 B의 갯수를 세어준다. 3과 1이 나오고, 그중 최소값을 저장

 

BB부터 탐색 시작하면 뒤에 R이 3개 B가 1개 나온다. 그중 최소값을 저장

 

그 두개를 비교한다.

 

3. 코드

package 그리디;

import java.util.Scanner;

public class back_17615볼모으기 {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int n=sc.nextInt(); sc.nextLine();
		String str = sc.nextLine();
		
		char lastColor = str.charAt(n-1); 
		int red = 0;
		int blue = 0;
		boolean flag = false;
		for (int i = str.length()-2; i >= 0 ; i--) {
			if(lastColor == str.charAt(i) && !flag) {
				continue;
			}
			else {
				flag = true;
				if(str.charAt(i)=='R')
					red++;
				else
					blue++;
			}
		}
		int res1 = Math.min(red, blue);
		red = 0;
		blue = 0;
		flag = false;
		char firstColor = str.charAt(0);
		for (int i =1; i<str.length(); i++) {
			if(firstColor == str.charAt(i) && !flag) {
				continue;
			}
			else {
				flag = true;
				if(str.charAt(i)=='R')
					red++;
				else
					blue++;
			}
		}
		int res2 = Math.min(red, blue);
		System.out.println(Math.min(res1, res2));
	}
}

4. 느낀점

없음.