c언어/BAEKJOON

c언어 17615번 볼 모으기 (백준)

rofn123 2025. 9. 14. 00:26
#include <stdio.h>

int main(void) {
	int n,f=0,a=0,c=0;
	scanf("%d",&n);
	char s[n+1];
	scanf("%s",s);
	
	for(int i=0;i<n;i++) {
		if(s[i]=='B') f=1;
		if(f==1 && s[i]=='R') ++a;
	} 
	c=a;f=0;a=0;
	for(int i=0;i<n;i++) {
		if(s[i]=='R') f=1;
		if(f==1 && s[i]=='B') ++a;
	} 
	if(a && a<c)c=a; f=0;a=0;
	for(int i=n-1;i>=0;i--) {
		if(s[i]=='B') f=1;
		if(f==1 && s[i]=='R') ++a;
	}
	if(a && a<c)c=a;f=0;a=0;
	for(int i=n-1;i>=0;i--) {
		if(s[i]=='R') f=1;
		if(f==1 && s[i]=='B') ++a;
	}
	if(a && a<c)c=a;
	printf("%d",c);
}

 

풀이 : 그리디?

 

1. 왼쪽에서 출발, 오른쪽에서 출발 2가지 경우

2. 여기서 B 가 발견 된 다음 이후 나머지 A를 옮기는 경우, A가 발견된 다음 나머지 B를 옮기는 경우 

 

총 4가지 경우를 고려하면 됩니다.

 

그 중 가장 최솟값을 출력하면 됩니다.

 

https://www.acmicpc.net/problem/17615