1216 회문 (D3)
주어진 100x100 평면 글자판에서 가로, 세로 모두 보아 가장 긴 회문의 길이를 구하는 문제
제약사항
각 칸에 들어가는 글자는 char type, ‘A’,’B’,’C’ 중 하나,
글자판은 정사각형
1시간 정도 걸렸는데, 이것저것 해보니까 결국 스스로 풀었다. ㅠㅠ 기쁘다
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Solution {
static int T = 10;
static int mapCase= 100;
public static void main(String args[]) throws Exception{
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
int i,j,k,l;
while(T-- > 0) {
int printNum = Integer.parseInt(bf.readLine());
char [][]map = new char[mapCase][mapCase];
// 입력받기
for(i = 0 ; i < mapCase; i++) {
String s = bf.readLine();
for(j =0; j < mapCase; j ++) {
map[i][j] = s.charAt(j);
// System.out.print(map[i][j]);
}
// System.out.println();
}
//행 조사
int n = 1; //찾으려는 행의 길이
// n이 주어졌다고 가정해보자.
int countRow = 0;
for(i = 0 ; i < mapCase; i++) {
int count = 0;
for(n = 0 ; n <mapCase; n++) {
for(j = 0; j < (mapCase-n+1); j++) {
boolean flag = true;
for(k = 0 ; k < n/2; k++) {
if(map[i][j+k] != map[i][j+n-1-k]) {
flag = false;
}
}
if(flag == true && n > count) {
count = n;
}
}
}
if(count> countRow) {
countRow = count;
}
}
int countCol = 0;
//열 조사
for(i = 0 ; i < mapCase; i++) {
int count = 0;
for(n = 0 ; n <mapCase; n++) {
for(j = 0; j < (mapCase-n+1); j++) {
boolean flag = true;
for(k = 0 ; k < n/2; k++) {
if(map[j+k][i] != map[j+n-1-k][i]) {
flag = false;
}
}
if(flag == true && n > count) {
count = n;
}
}
}
if(count> countCol) {
countCol = count;
}
}
if(countRow >= countCol) {
System.out.println("#"+printNum+" "+countRow);
}else {
System.out.println("#"+printNum+" "+countCol);
}
}
};
}
참고자료
SWE selfStudyBook(3)