코드포스

[Codeforces Round #784 (Div. 4)] D. Colorful Stamp

거북이같은곰 2022. 4. 22. 19:37

 

 


※ 'W'가 없는 연속된 picture 에서 모두 같은 색 stamp만 아니라면 picture를 만들 수 있다.

   (RRRRRR -> X    RRBRRBR -> O 바깥쪽 부터 채워넣으면 됨)

n이 1일 때 주의 (R or B 가 오면 No를 출력하면 되지만 W가 올 경우 stamp를 쓸 필요가 없기 때문에 YES를 출력해야 한다)

 

1. w가 없는 문장에서 단어의 갯수를 세는 cnt, 각각의 색을 세는 r, b를 만든다

2. 단어의 수(cnt)가 r이나 b와 같다면(문장이 전부 같은 색) NO를 출력한다.

3. w로 끝나지 않을 경우 마지막 cnt를 r과 b로 비교해줘야 한다.

 


import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
 
public class Main {
 
	public static void main(String[] args) throws IOException {
		// TODO Auto-generated method stub
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringBuilder sb = new StringBuilder();
		int T = Integer.parseInt(br.readLine());
		while(T --> 0) {
			int n = Integer.parseInt(br.readLine());
			if(n == 1) {
				String str = br.readLine();
				if(str.equals("W"))
					sb.append("YES").append('\n');
				else
					sb.append("NO").append('\n');
			}
			else {
				String str = br.readLine();
				int cnt = 0;
				int b = 0;
				int r = 0;
				boolean result = true;
				for(int i = 0; i < n; i++) {
					if(str.charAt(i) == 'W') {
						if(cnt > 0) {
							if(cnt == 1)
								result = false;
							else {
								if(cnt == b || cnt == r)
									result = false;
							}
						}
						cnt = 0;
						b = 0;
						r = 0;
					}
					else if(str.charAt(i) == 'B') {
						cnt++;
						b++;
					}
					else {
						cnt++;
						r++;
					}
				}
				if(cnt != 0) {
					if(cnt == b || cnt == r)
						result = false;
				}
				if(result)
					sb.append("YES").append('\n');
				else
					sb.append("NO").append('\n');
			}
		}
		System.out.println(sb);
	}
}