지식보부상님의 공부 일지

SWEA 15868번: XOR 2차원 배열 (D3) 본문

C언어 문제풀이

SWEA 15868번: XOR 2차원 배열 (D3)

지식보부상님 2023. 11. 11. 18:41

https://swexpertacademy.com/main/code/problem/problemDetail.do?problemLevel=3&contestProbId=AYTAurfKJDEDFARs&categoryId=AYTAurfKJDEDFARs&categoryType=CODE&problemTitle=&orderBy=FIRST_REG_DATETIME&selectCodeLang=ALL&select-1=3&pageSize=10&pageIndex=1

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com

 

또는 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이다.

또는 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;
}

채점 결과