문제.

풀이.
회문1과 같은 알고리즘을 이용하지만 회문의 길이를 정해주지 않았으므로 100*100 배열이니까 회문의 길이를 100부터 줄여가면서 확인한다. 런타임 에러 신경써야하고 범위 잘 정해줘야한다.
코드.
import java.io.BufferedReader;
import java.io.InputStreamReader;
public class App {
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
char[][] puzzle = new char[100][100]; // 문자열들을 받아서 넣을 8*8 배열
int count = 0; // 회문이 나올때 카운트할 변수
boolean flag = false; // 회문인지 아닌지 확인할 플래그
for(int TC=1;TC<=10;TC++){
count = 0;
// 찾을 회문 길이 입력받기
int N = Integer.parseInt(br.readLine());
//입력받기
for(int i=0;i<100;i++){
String str = br.readLine();
for(int j=0;j<100;j++){
puzzle[i][j] = str.charAt(j);
}
}
// 가로 확인하기
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(puzzle[i][j+k]!=puzzle[i][j-k+len-1]){
flag = false;
}
}
if(flag){
count = Math.max(count, len);
}
}
}
}
// 세로 확인하기
for(int len=1;len<=100;len++){
for(int i=0;i<100-len+1;i++){
for(int j=0; j<100;j++){
flag = true;
for(int k=0;k<len/2;k++){
if(puzzle[i+k][j]!=puzzle[i-k+len-1][j]){
flag = false;
}
}
if(flag){
count = Math.max(count, len);
}
}
}
}
System.out.printf("#%d %d\n", TC, count);
}
}
}
결과.

소감.
회문1을 풀고 푸는 것이라 딱히 어려움은 없었으나 범위를 줄여가면서 해야해서 조금 헷갈리는 경향이 있었다.
'코딩테스트' 카테고리의 다른 글
| SWEA 1218 : 괄호 짝짓기 (0) | 2024.03.11 |
|---|---|
| SWEA 1217 : 거듭제곱 (0) | 2024.03.11 |
| SWEA 1215 : 회문1 (0) | 2024.03.05 |
| SWEA 1213 : String (0) | 2024.03.05 |
| SWEA 2005 : 파스칼의 삼각형 (0) | 2024.02.23 |