Lavida 2556 요리조리 Palindrome

2 분 소요

문제 설명

Palindrome이란 오른쪽에서 왼쪽으로 읽었을 때와 왼쪽에서 오른쪽으로 읽었을 때가 서로 같 은 1개 이상의 문자로 이루어진 문자열을 말한다. 예를 들어 “madam”, “z”, “noon” 등의 문자열 이 palindrome이다. 각 셀마다 하나의 알파벳이 입력되어 있는, 가로와 세로 길이가 각각 K인 2차원 K*K 테이블이 있다. 이 테이블을 아래에서 설명하는 것처럼 4가지 다른 순서로 읽었을 때, 4개가 모두 같은 문 자열이 된다면 이를 “요리조리 Palindrome”이라고 한다. 아래의 예제는 K=3일 때 각 셀의 좌표를 나타내며, (a, b)에서 첫 번째 좌표 a는 행을, 두 번째 좌표 b는 열을 의미한다. -(1, 1)의 셀부터, 각 행이 끝날 때까지 오른쪽으로 읽고 아래 행을 같은 방법으로 읽는다. 테이블 1: abcdefghi 테이블 2: -(1, 1)의 셀부터, 각 열이 끝날 때까지 아래쪽으로 읽고 오른쪽열을 같은 방법으로 읽는다.


  • (1, 1)의 셀부터, 각 행이 끝날 때까지 오른쪽으로 읽고 아래 행을 같은 방법으로 읽는다. 테이블 1: abcdefghi 테이블 2: tableabellbekebllebaelbat - (1, 1)의 셀부터, 각 열이 끝날 때까지 아래쪽으로 읽고 오른쪽 열을 같은 방법으로 읽는 다. 테이블 1: adgbehcfi 테이블 2: tableabellbekebllebaelbat - (K, K)의 셀부터, 각 행의 시작부분까지 왼쪽으로 읽고 위 행을 같은 방법으로 읽는다. 테이블 1: ihgfedcba 테이블 2: tableabellbekebllebaelbat - (K, K)의 셀부터, 각 열의 시작부분까지 위쪽으로 읽고 왼쪽 열을 같은 방법으로 읽는다. 테이블 1: ifchebgda 테이블 2: tableabellbekebllebaelbat

입력 설명

입력의첫줄에는 테스트케이스의 개수 T(1<=T<=99 )가 주어진다. 각 케이스는 K+1 줄 로 구성되어있다. 각케이스의첫줄에는 테이블의 크기인 K ( 1 <= K <= 100 ) 값이 주어지고 다 음 K줄은 테이블의 셀의 정보가 주어진다. 각 줄마다 한 행씩 차례로 입력된다. 각 행은 K 길이 의 문자열이며, 한 셀에는 한 개의 알파벳 소문자만 들어갈 수 있다.

출력 설명

주어진 테이블이 ‘요리조리 Palindrome’이면 “YES”를 출력하고, 아니면 “NO”를 출력한다.

입력 예시

2
3
abc
def
ghi
5
table
abell
bekeb
lleba
elbat

출력 예시

NO
YES

코드1

#include <stdio.h>

int main() {
	int testcase, a,b = 0;
	int i, j;
	char arry[101][101], arr[101][101];

	scanf("%d", &testcase);
	for (int v = 0; v < testcase; v++)
	{
		scanf("%d", &a);
		for ( i = 0; i < a; i++)
		{
			scanf("%s", arry[i]);
		}
		for (i = 0; i < a; i++)
		{
			for (j = 0; j < a; j++)
			{
				if (arry[i][j] != arry[j][i]) {
					b = 1;
					goto ONE;
				}
			}
		}

	ONE:
		if (b != 1) {
			printf("YES\n");
		}
		else if (b == 1) {
			printf("NO\n");
			b = 0;
		}
	}
	return 0;
}

코드2

#include <stdio.h>

int main() {
	int testcase, a,b = 0;
	int i, j;
	char arry[101][101], arr[101][101];

	scanf("%d", &testcase);
	for (int v = 0; v < testcase; v++)
	{
		scanf("%d", &a);
		for (i = 0; i < a; i++)
		{
			scanf("%s", arry[i]);
		}
		for (i = 0; i < a; i++)
		{
			for (j = 0; j < a; j++)
			{
				if (arry[i][j] != arry[j][i]) {
					b = 1;
					break;
				}
			}
		}

		if (b != 1) {
			printf("YES\n");
		}
		else if (b == 1) {
			printf("NO\n");
			b = 0;
		}
	}
	return 0;
}

나 : say

여러분들이 goto를 알어!

댓글남기기