[SWEA] 1216. 회문2 (C++, D3)

728x90
반응형

 

 

#define _CRT_SECURE_NO_DEPRECATE
#include <iostream>
#include <string>
using namespace std;

string arr[100];
int ans = 1;

bool rowCheck(int level,int left, int right) {
	//행 체크 중간에 왼쪽 오른쪽 다르면 빠져나온다
	while (left <= right) {
		if (arr[level][left] != arr[level][right]) {
			return false;
		}
		left += 1;
		right -= 1;
	}
	return true;
}

bool colCheck(int level, int left, int right) {
	//cout << "left,right:" << left << "," << right << "\n";
	while (left <= right) {
		if (arr[left][level] != arr[right][level]) {
			return false;
		}
		left += 1;
		right -= 1;
	}
	return true;
}

void go() {
	//행체크
	for (int i = 0; i < 100; i++) {
		if (ans == 100)break;
		bool pass = false;
		for (int len = 100; len >= 1; len--) {//회문 길이
			for (int j = 0; j <= 100 - len; j++) {
				if (rowCheck(i, j, j + len-1)) {
					if (len > ans)ans = len;
					pass = true;
					break;
				}
			}
			if (pass)break;//현재 행에서 가장 긴 길이 찾음
		}
	}
	// 열 검사
	for (int i = 0; i < 100; i++) {
		if (ans == 100)break;
		bool pass = false;
		for (int len = 100; len >= 1; len--) {//회문 길이
			for (int j = 0; j <= 100 - len; j++) {
				if (colCheck(i, j, j + len - 1)) {
					if (len > ans)ans = len;
					pass = true;
					break;
				}
			}
			if (pass)break;//현재 행에서 가장 긴 길이 찾음
		}
	}
}



int main(void) {

	ios::sync_with_stdio(false);
	cin.tie(NULL);

	for (int tc = 1; tc <= 10; tc++)
	{
		int t;
		ans = 1;
		cin >> t;
		for (int i = 0; i < 100; i++) {
			cin >> arr[i];
		}

		go();

		cout << "#" << tc << " "<<ans  << "\n";
	}


	return 0;
}
728x90
반응형
TAGS.

Comments