728x90
https://euleroj.io/problemset/viewer/5000
문제에 퇴각검색 태그가 달려있지만 신경쓰지 않아도 된다.
여기에서 각 칸의 색을 다른 칸에 영향을 주지 않고 바꾸기 위해서는 정확히 반대쪽 칸의 색을 바꾸었을 때 색이 변하는 부분의 색을 모두 바꾸어 주면 된다. (해보면 알 수 있다.)
원래 상태는 모두 하얀색으로 한다.
입력을 받아가면서 검은색이 있는 부분이 있다면 그 부분의 색을 바꾸었을 때 색이 바뀌는 부분과 그 부분의 색을 모두 바꾼다. 입력을 모두 받은 후 9번 칸 부터 1번칸 까지 탐색하며, 검은색이라면, 색을 바꾼다. 이때, 원래 상태에서 색을 바꾸는 경우는 여기서 색을 바꾸는 경우와 완전히 반대가 되어야 한다.
이대로 구현해 주면 된다.
코드
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
32
33
34
|
#include <bits/stdc++.h>
using namespace std;
char S[12];
int A[12][12];
int main(){
int i,j,k,l,cnt;
cnt=0;
memset(A,0,sizeof(A));
scanf("%s",S);
for(i=1;i<=3;i++){
for(j=1;j<=3;j++){
if(S[(i-1)*3+j-1]=='b'){
for(k=i-1;k<=i+1;k++){
for(l=j-1;l<=j+1;l++){
A[k][l]^=1;
}
}
}
}
}
stack<int>s;
for(i=3;i>0;i--){
for(j=3;j>0;j--){
if(A[i][j]){
printf("%d",(3-i)*3+(3-j+1));
cnt++;
}
}
}
if(cnt==0)printf("0");
printf("\n");
return 0;
}
|
cs |
728x90