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