1 분 소요



[S/W 문제해결 기본] 3일차 - 회문2



🔍 문제 풀이

문제 도식화

인덱스 값 변화를 체크하고 규칙성을 찾자

assets/images/2025/SWEA 1216.png



💻 전체 코드

길이를 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;
    }
}


카테고리:

업데이트:

댓글남기기