C언어 문제풀이
SWEA 15868번: XOR 2차원 배열 (D3)
지식보부상님
2023. 11. 11. 18:41
SW Expert Academy
SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!
swexpertacademy.com
0 또는 1로 구성된 두 이진 수열 a1 , a2 , ···, an 과 b1, b2, ···, bm에 대해, 이 수열의 XOR 2차원배열 Fa,b 는 n X m 크기의 배열로, Fa,b [i][j] =ai ⊕bj 로 정의된다. 여기서 ⊕는 bitwise XOR 연산자로, 0 ⊕ 0 = 0, 0 ⊕ 1 = 1, 1 ⊕ 0 = 1, 1 ⊕ 1 = 0이다. 0 또는 1로 구성된 n X m 크기의 2차원 배열 T가 주어질 때, 이 배열이 어떤 이진 수열의 XOR 2차원 배열인지를 판단하는 프로그램을 작성하라. [입력] 첫 번째 줄에 테스트 케이스의 수 T가 주어진다. 각 테스트 케이스의 첫 번째 줄에는 배열의 크기를 나타내는 두 자연수 n과 m (1≤n, m≤5)이 공백 하나를 사이로 두고 주어진다. 다음 n개 줄에는 길이가 m인 0 또는 1로만 구성된 문자열이 주어지는데, 이 중 i번째 줄의 j번째 글자는 T[i][j]이다. [출력] 각 테스트 케이스마다, T가 어떤 이진 수열의 XOR 2차원 배열이라면 (즉, 어떤 이진 수열 a1 , a2 , ···, an과 b1, b2, ···, bm에 대해 T=Fa,b 라면) ‘yes’를, 그렇지 않다면 ‘no’를 출력한다. |
#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 5
char xor(char x, char y){
if (x-'0' == y-'0')
return '0';
else
return '1';
}
int main() {
int tc, n, m;
int i, j, k, flag;
char board[MAXSIZE][MAXSIZE], a[MAXSIZE], b[MAXSIZE];
scanf("%d", &tc);
for (i = 0; i < tc; i++) {
flag = 1;
a[0] = '1';
scanf("%d %d", &n, &m);
for (j = 0; j < n; j++) {
scanf("%s", &board[j]);
}
for (j = 0; j < m; j++) {
b[j] = xor (a[0], board[0][j]);
}
for (j = 1; j < n; j++) {
for (k = 1; k < m; k++) {
if (xor (b[k], board[j][k])-'0' != xor (b[k - 1], board[j][k - 1])-'0') {
flag = 0;
break;
}
}
}
if (flag) {
printf("#%d yes\n", i + 1);
}
else {
printf("#%d no\n", i + 1);
}
}
return 0;
}