[Algorithm/Java] SWEA 1216번 - 회문2
🔍 문제 풀이
문제 도식화
인덱스 값 변화를 체크하고 규칙성을 찾자
💻 전체 코드
길이를 100 -> 1
로 줄여가며 찾으면 처음 발견한 회문 길이 = 최댓값
이니 max 갱신 없이 그 즉시 return len
하면 된다.
import java.io.*;
public class Solution {
static char[][] arr;
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int T = 10;
for (int tc = 1; tc <= T; tc++) {
int t = Integer.parseInt(br.readLine());
arr = new char[100][100];
for(int i=0; i<100; i++){
String line = br.readLine();
for(int j=0; j<100; j++){
arr[i][j] = line.charAt(j);
}
}
int ans = solve();
System.out.println("#" + tc + " " + ans);
}
}
static int solve(){
// 회문 탐색 (길이 100부터 1까지 줄여가며 검사)
for(int len = 100; len >= 1; len --){
// 가로 회문 탐색
for(int i=0; i<100; i++){
for(int sj = 0; sj <= 100- len; sj++){
StringBuilder sb = new StringBuilder();
for(int j=sj; j<sj + len; j++){
sb.append(arr[i][j]);
}
if(isPalindrome(sb)) return len; // 가장 긴 회문 길이
}
}
// 세로 회문 탐색
for(int i=0; i<100; i++){
for(int sj = 0; sj <= 100- len; sj++){
StringBuilder sb = new StringBuilder();
for(int j=sj; j<sj + len; j++){
sb.append(arr[j][i]);
}
if(isPalindrome(sb)) return len; // 가장 긴 회문 길이
}
}
}
return 0;
}
static boolean isPalindrome(StringBuilder sb){
String str = sb.toString();
String rstr = sb.reverse().toString();
if(str.equals(rstr)) return true;
return false;
}
}
댓글남기기