250x250
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 백준#BOJ#8012#한동이는영업사원
- 백준#BOJ#1939#중량제한
- 백준#BOJ#2615#오목
- 백준#boj#16932#모양만들기
- 백준#BOJ#14501#퇴사#브루트포스
- 백준#BOJ#12865#평범한배낭
- 백준#boj#12755
Archives
- Today
- Total
순간을 성실히, 화려함보단 꾸준함을
[boj : 12739] 돌림판(small) 본문
문제 : 조건에 맞게 하나씩 시뮬레이션 돌리면 된다.
해설 : 주의할점은 '동시에' 돌림판들이 바뀌어야 된다는 점. 이를 위해 새로운 문자열을 선언한 후 이를 붙여넣고 다시 비교해주는 식으로 구현해 주자.
실수만 없다면 다들 잘 풀 수 있는 문제!!
#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 |