본문 바로가기
Programming/Algorithm

swe 1216 회문2

by OKOK 2018. 3. 29.

1. 쉬운문제는 20분컷 중간문제는 40분 컷입니다.

2. 한번에 설계해서 완성하기.

3. 처음에 입력을 받고 한번 디버깅을 하면 좋으려나?

4. 컴퓨터가 빠르면 할맛이 나는데, 버벅거리면...ㅇㄹ

5. 디버깅 없이도 처음부터 잘 할 수 있도록 예외처리도 모두 생각하면서 설계를 하도록 합니다. 


/*

1000 시작합니다.

1216 회문2 문제입닙니다.


먼저 8*8에서 풀고, 100 * 100 으로 넘어가겠습니다.

제일 큰 8 에서 7 .... 쭉쭉쭉 내려가면서 찾도록 합니다.

*/


#include <iostream>

#include <algorithm>

#include <string>

using namespace std;

#define SIZE 100 // 100

int map[SIZE][SIZE];

int ans;

int isFine;

string str;


void problemIn() {

for (int i = 0; i < SIZE; i++) {

cin >> str;

for (int j = 0; j < SIZE; j++) {

map[i][j] = str[j];

}

}

}


void init() {


}


void findPalin(int k) {

if (k == 1) {

ans = 1;

return;

}


if ((k % 2) == 0) { // 짝수이면,

for (int i = 0; i < SIZE; i++) { // 가로검사

for (int j = (k / 2) - 1; j < SIZE - (k / 2); j++) {

for (int l = 0; l < (k / 2); l++) {

if (map[i][j - l] == map[i][j + 1 + l]) {

isFine = 1;

}

else {

isFine = 0;

break;

}

}

if (isFine) {

ans = k;

return;

}

}

}


for (int j = 0; j < SIZE; j++) { // 세로검사

for (int i = (k / 2) - 1; i < SIZE - (k / 2); i++) {

for (int l = 0; l < (k / 2); l++) {

if (map[i - l][j] == map[i + 1 + l][j]) {

isFine = 1;

}

else {

isFine = 0;

break;

}

}

if (isFine) {

ans = k;

return;

}

}

}

}


else { // 홀수이면

for (int i = 0; i < SIZE; i++) {

for (int j = (k / 2); j < SIZE - (k / 2); j++) {

for (int l = 1; l <= (k / 2); l++) {

if (map[i][j - l] == map[i][j + l]) {

isFine = 1;

}

else {

isFine = 0;

break;

}

}

if (isFine) {

ans = k;

return;

}

}

}


for (int j = 0; j < SIZE; j++) {

for (int i = (k / 2); i < SIZE - (k / 2); i++) {

for (int l = 1; l <= (k / 2); l++) {

if (map[i - l][j] == map[i + l][j]) {

isFine = 1;

}

else {

isFine = 0;

break;

}

}

if (isFine) {

ans = k;

return;

}

}

}

}

}


void solve() {


for (int i = SIZE; i > 0; i--) {

findPalin(i);

if (isFine) return;

}


}


int main() {

for (int i = 0; i < 10; i++) {

int tc;

cin >> tc;

problemIn();

solve();

cout << "#" << tc << " " << ans << endl;

init();

}

return 0;