[백분/Java] 25501번 :: 재귀의 귀재

2024. 6. 27. 09:11· ✏️ 문제풀이/백준
목차
  1. | 문제
  2. | 풀이
  3. | 정리

| 문제

정휘는 후배들이 재귀 함수를 잘 다루는 재귀의 귀재인지 알아보기 위해 재귀 함수와 관련된 문제를 출제하기로 했다.

팰린드롬이란, 앞에서부터 읽었을 때와 뒤에서부터 읽었을 때가 같은 문자열을 말한다. 팰린드롬의 예시로 AAA, ABBA, ABABA 등이 있고, 팰린드롬이 아닌 문자열의 예시로 ABCA, PALINDROME 등이 있다.

어떤 문자열이 팰린드롬인지 판별하는 문제는 재귀 함수를 이용해 쉽게 해결할 수 있다. 아래 코드의 isPalindrome 함수는 주어진 문자열이 팰린드롬이면 1, 팰린드롬이 아니면 0을 반환하는 함수다.

#include <stdio.h>
#include <string.h>
int recursion(const char *s, int l, int r){
if(l >= r) return 1;
else if(s[l] != s[r]) return 0;
else return recursion(s, l+1, r-1);
}
int isPalindrome(const char *s){
return recursion(s, 0, strlen(s)-1);
}
int main(){
printf("ABBA: %d\n", isPalindrome("ABBA")); // 1
printf("ABC: %d\n", isPalindrome("ABC")); // 0
}

정휘는 위에 작성된 isPalindrome 함수를 이용하여 어떤 문자열이 팰린드롬인지 여부를 판단하려고 한다.

구체적으로는, 문자열 𝑆$S$를 isPalindrome 함수의 인자로 전달하여 팰린드롬 여부를 반환값으로 알아낼 것이다. 더불어 판별하는 과정에서 recursion 함수를 몇 번 호출하는지 셀 것이다.

정휘를 따라 여러분도 함수의 반환값과 recursion 함수의 호출 횟수를 구해보자.

 

| 입력

첫째 줄에 테스트케이스의 개수 𝑇가 주어진다. (1≤𝑇≤1000)

둘째 줄부터 𝑇개의 줄에 알파벳 대문자로 구성된 문자열 𝑆가 주어진다. (1≤|𝑆|≤1000)

 

| 출력

각 테스트케이스마다, isPalindrome 함수의 반환값과 recursion 함수의 호출 횟수를 한 줄에 공백으로 구분하여 출력한다.

 

| 풀이

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
static int count = 0;
public static int recursion(String s, int l, int r) {
count++;
if(l >= r)
return 1;
else if (s.charAt(l) != s.charAt(r))
return 0;
else
return recursion(s, l+1, r-1);
}
public static int isPalindrome(String s) {
count = 0;
return recursion(s, 0, s.length()-1);
}
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++) {
String word = br.readLine();
System.out.println(isPalindrome(word) + " " + count);
}
}
}

 

| 정리

문제에 주어진 힌트를 사용해서 풀이했다. recursion 함수가 몇번 호출되는지 카운트 할 count 변수를 선언하고

main 에서는 T 만큼 반복문을 수행하며 입력받은 word의 팰린드롬 여부와 recursion 호출 횟수를 출력해준다.

저작자표시 (새창열림)
  1. | 문제
  2. | 풀이
  3. | 정리
'✏️ 문제풀이/백준' 카테고리의 다른 글
  • [백준/Java] 1316번 :: 그룹 단어 체커
  • [백준/Java] 2559번 :: 수열
  • [백준/Java] 10870번 :: 피보나치 수5
  • [백준/Java] 11050번 :: 이항 계수 1
bono-hye
bono-hye
bono-hye
공부를 합시다👩🏻‍💻
bono-hye
전체
오늘
어제
  • 분류 전체보기 (506)
    • 📚 Study (225)
      • Java (148)
      • Oracle (28)
      • JDBC (4)
      • Javascript (9)
      • JSP & Servlet (19)
      • JQuery (6)
      • Spring (9)
      • Springboot (0)
      • 개인 공부 (2)
    • ✏️ 문제풀이 (280)
      • 백준 (181)
      • 프로그래머스 (99)

블로그 메뉴

  • 홈
  • 글쓰기
  • 관리
hELLO · Designed By 정상우.v4.2.1
bono-hye
[백분/Java] 25501번 :: 재귀의 귀재
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.