Programming/Algorithm

swe 1216 회문2

OKOK 2018. 3. 29. 10:22

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;