순간을 성실히, 화려함보단 꾸준함을

[boj : 12739] 돌림판(small) 본문

알고리즘,SQL/백준,BOJ

[boj : 12739] 돌림판(small)

폭발토끼 2020. 12. 22. 11:43

www.acmicpc.net/problem/12739

 

12739번: 돌림판 (Small)

지훈이는 경품 이벤트를 진행하기 위해서 원형판이 N등분 되어 있고, 각 N등분된 곳에 빨간색 또는 초록색 또는 파란색이 색칠되어 있는 돌림판을 준비하였다. 이 이벤트의 룰은 간단하다. 이벤

www.acmicpc.net

문제 : 조건에 맞게 하나씩 시뮬레이션 돌리면 된다.

 

해설 : 주의할점은 '동시에' 돌림판들이 바뀌어야 된다는 점. 이를 위해 새로운 문자열을 선언한 후 이를 붙여넣고 다시 비교해주는 식으로 구현해 주자. 

실수만 없다면 다들 잘 풀 수 있는 문제!!

 

#include<bits/stdc++.h>

using namespace std;

int n, k;
int arr[1000];
string s;

int draw(int x);

int main()
{
	string ans = "";
	cin >> n >> k >> s;
	
	while (k--) {
		ans = "";
		for (int i = 0; i < s.length(); i++) {
			if (s[i] == 'R')arr[i]=0;
			else if (s[i] == 'G')arr[i]=1;
			else arr[i]=2;
		}
		for (int i = 0; i < s.length(); i++) {
			int ret = draw(i);
			if (ret == 2)
				ans += 'B';
			else if (ret == 1)
				ans += 'R';
			else
				ans += 'G';
		}
		s = ans;
	}
	arr[0] = arr[1] = arr[2] = 0;
	for (int i = 0; i < s.length(); i++) {
		if (s[i] == 'R')arr[0]++;
		else if (s[i] == 'G')arr[1]++;
		else arr[2]++;
	}
	for (int i = 0; i < 3; i++)
		cout << arr[i] << " ";
	return 0;
}
int draw(int x)
{
	int len = s.length();
	int cnt[3] = { 0,0,0 };

	if (x == 0)
		cnt[arr[len - 1]]++;
	else
		cnt[arr[x - 1]]++;	
	cnt[arr[x]]++;
	cnt[arr[(x + 1) % len]]++;

	if ((cnt[0]==1 && cnt[1]==1 && cnt[2]==1) || (cnt[0] == 3 || cnt[1] == 3 || cnt[2] == 3))return 2;
	if ((cnt[0] == 2 && cnt[1] == 1) || (cnt[1] == 2 && cnt[2] == 1) || (cnt[2] == 2 && cnt[0] == 1))return 1;
	else return 0;
}

'알고리즘,SQL > 백준,BOJ' 카테고리의 다른 글

[boj : 4803] 트리  (0) 2020.12.22
[boj : 1833] 고속철도 설계하기  (0) 2020.12.22
[boj : 7682] 틱택토  (0) 2020.12.20
[boj : 2758] 로또  (0) 2020.12.18
[boj : 3709] 레이저빔은 어디로  (0) 2020.12.17