알고리즘(백준 등) 공부

SWEA 20019. 회문의 회문

posite 2026. 4. 26. 12:55

회문의 회문은 길이가 홀수인 회문 안에서 앞에서 절반, 뒤에서 절반이 각각 회문인 문자열이다. 주어진 문자열이 회문의 회문인지 확인하는 문제이다.

 

주어진 문자열이 회문인지 확인하고, substring을 통해 잘라낸 앞과 뒤가 회문인지 확인하여 모두 회문이면 회문의 회문이고 아니면 회문이 아니다.

private static boolean isPalindrome(String s) {
    for(int i=0; i<s.length()/2; i++) {
        if(s.charAt(i) != s.charAt(s.length()-1-i)) return false;
    }
		
    return true;
}
if(isPalindrome(line)) {
    if(isPalindrome(line.substring(0, line.length()/2)) && isPalindrome(line.substring(line.length()/2 + 1))) {
        sb.append("YES").append('\n');
    } else {
        sb.append("NO").append('\n');					
    }
} else {
    sb.append("NO").append('\n');
}

 

 

결과 코드는 다음과 같다.

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

public class Solution {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int T = Integer.parseInt(br.readLine());
        StringBuilder sb = new StringBuilder();

        for (int tc = 1; tc <= T; tc++) {
            sb.append('#').append(tc).append(' ');
            String line = br.readLine();
            if(isPalindrome(line)) {
                if(isPalindrome(line.substring(0, line.length()/2)) && isPalindrome(line.substring(line.length()/2 + 1))) {
                    sb.append("YES").append('\n');
                } else {
                    sb.append("NO").append('\n');					
                }
            } else {
                sb.append("NO").append('\n');
            }
        }
        br.close();
        System.out.print(sb);
    }
	
    private static boolean isPalindrome(String s) {
        for(int i=0; i<s.length()/2; i++) {
            if(s.charAt(i) != s.charAt(s.length()-1-i)) return false;
        }
		
        return true;
    }
}