백준 25501 재귀의 귀재 [JAVA]

Ga0·2023년 8월 20일
0

baekjoon

목록 보기
88/137
post-custom-banner

문제 해석

  • 이 문제는 팰린드롬인지 아닌지 판별하는 문제이다.
  • 첫번째 줄에는 테스트케이스의 개수(T)를 입력받는다. (단, T는 1이상이고 1000이하이다.)
  • 두번째 줄부터는 테스트케이스의 개수T만큼 대문자로 구성된 문자열 S가 주어진다.
  • 모두 입력받았다면 T개 만큼의 문자열이 팰린드롬인지 판별하여 팰린드롬이면 1, 아니면 0을 반환하며 재귀가 몇번 돌았는지도 반환하여 출력하면 된다. (출력 형태 : 팰린드롬 여부(1 or 0) 재귀 횟수(1~))

코드

import java.io.*;

public class Main {
    static StringBuilder sb = new StringBuilder();

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        int T = Integer.parseInt(br.readLine());

        for(int i = 0; i < T; i++){
            isPalindrome(br.readLine());
        }

        br.close();
        System.out.println(sb);
    }

    //재귀 함수 호출하는 부분 + 반환된 값 입력하는 부분
    static void isPalindrome(String str){
        int[] result = recursion(str, 0, str.length()-1, 0);
        sb.append(result[0]).append(" ").append(result[1] + "\n");
    }

    //팰린드롬인지 판별하는 메소드 (파라티머 : 문자열, 재귀 수행 횟수)
    static int[] recursion(String str, int fp, int ep, int count){
        count++; //함수를 돌때마다 재귀 수행 횟수 +1해줘야하므로 증가시킴
        //앞 부분 매칭 값의 위치가 끝 부분 매칭 값의 위치보다 크거나 같은 경우는 이미 다 체크했고 걸리는 부분이 없었다는 것이므로
        // => 1과 재귀 횟수 반환
        if(fp >= ep){
            return new int[]{1, count};
        }
        //매칭되는 값이 서로 다르면 더이상 수행 X => 0, 재귀 횟수 반환
        else if(str.charAt(fp) != str.charAt(ep)){ 
            return new int[]{0, count};
        }
        // 앞 매칭 값이 끝 매칭 값의 위치보다 작은데 또 해당 매칭 값이 같다면
        // 아직 체크해야하는 부분이 존재하는 것이므로 재귀 함수 호춝
        else{
            return recursion(str, fp+1, ep-1, count);
        }
    }

}
        

결과

느낀 점

  • 이 문제는 이미 문제해서 답을 모두 말해주고 있어서 큰 어려움없이 풀 수 있었다. (C언어 코드를 JAVA언어로 바꾼 수준...)
post-custom-banner

0개의 댓글