[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 IOException {
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 max = solve();
// 출력
System.out.println("#" + t + " " + max);
}
}
static int solve(){
// 회문 탐색 (길이 100부터 1까지 줄여가며 검사)
for (int len = 100; len >= 1; len--) {
// 가로 회문 탐색
for (int i = 0; i < 100; i++) {
for (int start = 0; start <= 100 - len; start++) {
StringBuilder sb = new StringBuilder();
for (int j = start; j < start + len; j++) {
sb.append(arr[i][j]);
}
if (isPalindrome(sb)) {
return len; // 가장 긴 회문 길이
}
}
}
// 세로 회문 탐색
for (int i = 0; i < 100; i++) {
for (int start = 0; start <= 100 - len; start++) {
StringBuilder sb = new StringBuilder();
for (int j = start; j < start + 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;
}
}
댓글남기기