백준 23304 자바

손찬호·2024년 7월 12일
0

알고리즘

목록 보기
78/91

풀이 아이디어

입력된 문자열의 길이가 n일 때
[n/2]길이만큼의 접두사, 접미사도 팰린드롬이고
재귀적으로 접두사, 접미사도 팰린드롬이면 아카라카 팰린드롬이라고 부르는데
재귀적으로 처리하면 된다.

String suffix = input.substring(len/2+(len%2==0 ? 0 : 1), len);
접미사의 경우 입력된 문자열의 길이가 홀수냐 짝수냐에 따라서
문자열을 자르는 인덱스를 다르게 구분해줘야했다.
n=7이면 123,567
n=6이면 123,456이듯이 말이다.

풀이 코드

import java.io.*;
public class _23304 {
    public static void main(String[] args) throws IOException{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String input = br.readLine();

        if(isAkarakaPalindrome(input)){
            System.out.println("AKARAKA");
        }
        else{
            System.out.println("IPSELENTI");
        }   
    }

    // 재귀적으로 아카라카 팰린드롬인지 확인하는 함수
    static public boolean isAkarakaPalindrome(String input){
        int len = input.length();

        if (len==1){
            return true;
        }

        boolean result = false;

        if (len>=2){
            // 접두사 접미사 분리 
            String prefix = input.substring(0, len/2);
            String suffix = input.substring(len/2+(len%2==0 ? 0 : 1), len); // 짝수 홀수에 따라 다르게 처리

            // input이 팰린드롬인지 확인
            for(int i=0;i<len/2;i++){
                if(input.charAt(i)!=input.charAt(len-1-i)){
                    return false;
                }
            }

            // input의 접두사 접미사도 아카라카 팰린드롬이면 true
            if(isAkarakaPalindrome(prefix) && isAkarakaPalindrome(suffix) ){
                result = true;
            }
        }

        return result;
    }
}
profile
매일 1%씩 성장하려는 주니어 개발자입니다.

0개의 댓글

관련 채용 정보