[문제링크 - SWEA - 회문2] https://swexpertacademy.com/main/code/problem/problemDetail.do?problemLevel=3&contestProbId=AV14Rq5aABUCFAYi&categoryId=AV14Rq5aABUCFAYi&categoryType=CODE&problemTitle=&orderBy=INQUERY_COUNT&selectCodeLang=ALL&select-1=3&pageSize=10&pageIndex=2
- 회문의 길이를 1부터 100까지의 경우를 하나하나 확인하여 최대값을 구한다.
len=1
일 때 부터 시작하여 행에 따라 최대값을 구하고, 열에 따라 최대값을 구한다.
- 1일 때는 시작할 수 있는 경우의 수가 100일 것이고, 20일 때는 80일 것이다.
- 그 부분을
for(int j=0; j<100-len+1; j++)
이렇게 표시하였다.
- 회문의 길이와 시작하는 위치가 정해졌으면, 시작위치부터 회문길이까지 진짜 회문이 맞는지 체크한다.
- 대칭적이므로 회문길이의 반만 for문을 돌리면된다.
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Solution {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
StringTokenizer st;
boolean flag;
for(int t=1; t<=10; t++) {
int c = Integer.parseInt(br.readLine());
String[][] map = new String[100][100];
int max = Integer.MIN_VALUE;
for(int i=0; i<100; i++) {
map[i] = br.readLine().split("");
}
for(int len=1; len<=100; len++) {
for(int i=0; i<100; i++) {
for(int j=0; j<100-len+1; j++) {
flag = true;
for(int k=0; k<len/2; k++) {
if(!map[i][j+k].equals(map[i][j-k+len-1])) {
flag = false;
break;
}
}
if(flag) {
max = Math.max(max, len);
}
}
}
for(int i=0; i<100; i++) {
for(int j=0; j<100-len+1; j++) {
flag = true;
for(int k=0; k<len/2; k++) {
if(!map[j+k][i].equals(map[j-k+len-1][i])) {
flag = false;
break;
}
}
if(flag) {
max = Math.max(max, len);
}
}
}
}
sb.append("#" + t + " " + max + "\n");
}
System.out.println(sb);
}
}