© 2025 anveloper.dev
GitHub·LinkedIn·Contact

목차

  • 문제
  • 입력
  • 출력
  • 예제
  • 풀이
  • 코드
  • 복잡도
풀이 목록으로 돌아가기

BOJ 25501 - 재귀의 귀재

2023-12-21
BOJ
브론즈 II
java
원본 문제 보기
구현
문자열
재귀

문제

BOJ 25501 - 재귀의 귀재

문자열이 팰린드롬인지 재귀 함수로 판별하되, 재귀 호출 횟수도 함께 출력하라.

입력

첫째 줄에 테스트 케이스 수 T, 이후 T개의 문자열이 주어진다.

출력

각 문자열에 대해 팰린드롬이면 1, 아니면 0과 재귀 호출 횟수를 공백으로 구분하여 출력한다.

예제

입력출력
2 AAA ABBA1 2 1 2

풀이

양 끝에서 중앙으로 좁혀가며 재귀적으로 팰린드롬을 판별하고, 호출 횟수를 카운트한다.

  1. 시작 인덱스 st와 끝 인덱스 ed를 설정한다
  2. 재귀 호출마다 cnt를 증가시킨다
  3. st가 ed 이상이면 팰린드롬(1), 양 끝 문자가 다르면 비팰린드롬(0)을 반환한다
  4. 양 끝이 같으면 recur(s, st+1, ed-1)로 안쪽을 비교한다

핵심 아이디어: 양 끝에서 중앙으로 한 칸씩 좁혀가므로 최대 N/2번 재귀 호출된다.

코드

package day699;
 
import java.io.*;
 
public class Day684BOJ25501재귀의귀재 {
 
  static int cnt = 0;
 
  public static void main(String[] args) throws Exception {
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
 
    int T = Integer.parseInt(br.readLine());
    StringBuilder sb = new StringBuilder();
    for (int i = 0; i < T; i++) {
      String S = br.readLine();
      cnt = 0;
      sb.append(isPalindrome(S)).append(" ").append(cnt).append("\n");
    }
    br.close();
    System.out.print(sb);
  }
 
  static int isPalindrome(String s) {
    return recur(s, 0, (s.length() - 1));
  }
 
  static int recur(String s, int st, int ed) {
    cnt++;
 
    if (st >= ed)
      return 1;
    else if (s.charAt(st) != s.charAt(ed))
      return 0;
    else
      return recur(s, (st + 1), (ed - 1));
  }
}

복잡도

  • 시간: O(N)
  • 공간: O(N)