알고리즘

bj17609(회문)-투 포인터, 재귀

쥐4 2025. 4. 21. 20:20

https://www.acmicpc.net/problem/17609

이번 문제는 유연한 사고가 필요한 문제였다.

건너뜀을 재귀로 처리하면 아주 쉽게 풀리는 문제였다.

문제 분류를 보고 투포인터로만 풀어보려고 하는 오류를 범하고 말아따~

 

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Main {
    static int T;
    static String[] str;
    static BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
    public static void main(String[] args) throws IOException {
        initialize();
        solve();
    }

    private static void solve() {
        for(int i = 0; i < T; i++){
            System.out.println(check(0, str[i].length()-1, str[i], 0));
        }
    }

    private static int check(int start, int end, String s, int flag) {
        if (flag == 2) {
            return 2;
        }

        while (start < end) {
            if (s.charAt(start) == s.charAt(end)) {
                start++;
                end--;
            } else {
                return Math.min(check(start + 1, end, s, flag + 1), check(start, end - 1, s, flag + 1));
            }
        }
        return flag;
    }

    private static void initialize() throws IOException {
        T = Integer.parseInt(bufferedReader.readLine());
        str = new String[T];
        for(int i = 0; i < T; i++){
            str[i] = bufferedReader.readLine();
        }
    }
}