μ νλ νλ°°λ€μ΄ μ¬κ· ν¨μλ₯Ό μ λ€λ£¨λ μ¬κ·μ κ·μ¬μΈμ§ μμ보기 μν΄ μ¬κ· ν¨μμ κ΄λ ¨λ λ¬Έμ λ₯Ό μΆμ νκΈ°λ‘ νλ€.
ν°λ¦°λ둬μ΄λ, μμμλΆν° μ½μμ λμ λ€μμλΆν° μ½μμ λκ° κ°μ λ¬Έμμ΄μ λ§νλ€. ν°λ¦°λ둬μ μμλ‘ 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 ν¨μλ₯Ό μ΄μ©νμ¬ μ΄λ€ λ¬Έμμ΄μ΄ ν°λ¦°λ둬μΈμ§ μ¬λΆλ₯Ό νλ¨νλ €κ³ νλ€.
ꡬ체μ μΌλ‘λ, λ¬Έμμ΄
λ₯Ό isPalindrome ν¨μμ μΈμλ‘ μ λ¬νμ¬ ν°λ¦°λ둬 μ¬λΆλ₯Ό λ°νκ°μΌλ‘ μμλΌ κ²μ΄λ€. λλΆμ΄ νλ³νλ κ³Όμ μμ recursion ν¨μλ₯Ό λͺ λ² νΈμΆνλμ§ μ
κ²μ΄λ€.
μ νλ₯Ό λ°λΌ μ¬λ¬λΆλ ν¨μμ λ°νκ°κ³Ό recursion ν¨μμ νΈμΆ νμλ₯Ό ꡬν΄λ³΄μ.
첫째 μ€μ ν
μ€νΈμΌμ΄μ€μ κ°μ
κ° μ£Όμ΄μ§λ€. (
)
λμ§Έ μ€λΆν°
κ°μ μ€μ μνλ²³ λλ¬Έμλ‘ κ΅¬μ±λ λ¬Έμμ΄
κ° μ£Όμ΄μ§λ€. (
)
κ° ν μ€νΈμΌμ΄μ€λ§λ€, isPalindrome ν¨μμ λ°νκ°κ³Ό recursion ν¨μμ νΈμΆ νμλ₯Ό ν μ€μ 곡백μΌλ‘ ꡬλΆνμ¬ μΆλ ₯νλ€.
μμ μ
λ ₯ 1
5
AAA
ABBA
ABABA
ABCA
PALINDROME
μμ μΆλ ₯ 1
1 2
1 3
1 3
0 2
0 1
def recursion(s, l, r):
if l >= r: return 1
elif s[l] != s[r]: return 0
else: return recursion(s, l+1, r-1)
def isPalindrome(s):
return recursion(s, 0, len(s)-1)
print('ABBA:', isPalindrome('ABBA'))
print('ABC:', isPalindrome('ABC'))
public class Main{
public static int recursion(String s, int l, int r){
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){
return recursion(s, 0, s.length()-1);
}
public static void main(String[] args){
System.out.println("ABBA: " + isPalindrome("ABBA"));
System.out.println("ABC: " + isPalindrome("ABC"));
}
}
let callCount = 0
function recursion(s, l, r) {
if(l === 0) callCount = 0
callCount++
if(l >= r) return 1;
else if(s[l] !== s[r]) return 0;
else return recursion(s, l+1, r-1);
}
function isPalindrome(s){
return recursion(s, 0, s.length-1);
}
const input = require('fs').readFileSync('/dev/stdin').toString().trim().split("\n")
input.shift()
const result = input.map((a, i) => {
return `${isPalindrome(a)} ${callCount}`
})
console.log(result.join("\n"))