반응형
문제1
문자열을 받아들이고 그 문자열의 역순인 문자열을 반환하는 reverse 함수를 작성합니다.
function reverse(string){
}
// reverse('awesome') // 'emosewa'
// reverse('rithmschool') // 'loohcsmhtir'
정답
더보기
function reverse(string) {
if (string.length === 1) {
return string;
}
return reverse(string.slice(1)) + string[0];
}
문제2
전달된 문자열이 팔린드롬(앞으로 읽으나 뒤로 읽으나 동일한 문자)인 경우 true 를 반환하는 isPalindrome이라는 재귀(recursive) 함수를 작성하시오. 팔린드롬이 아닐 경우 false 를 반환합니다.
// isPalindrome('awesome') // false
// isPalindrome('foobar') // false
// isPalindrome('tacocat') // true
// isPalindrome('amanaplanacanalpanama') // true
// isPalindrome('amanaplanacanalpandemonium') // false
function isPalindrome(str){
}
정답
더보기
// 내 정답
function isPalindrome(str){
function helper(str2) {
if (str2.length === 1) {
return str2;
}
return helper(str2.slice(1)) + str2[0]
}
return str === helper(str) ? true : false;
}
// 정답지
function isPalindrome(str){
if(str.length === 1) return true;
if(str.length === 2) return str[0] === str[1];
if(str[0] === str.slice(-1)) return isPalindrome(str.slice(1,-1))
return false;
}
문제3
배열과 콜백을 받아들이는 someRecursive 라는 재귀(recursive) 함수를 작성하시오. 이 함수는 배열의 단일 값이 콜백에 전달될 때 true를 반환하면 true를 반환합니다. 그렇지 않으면 false를 반환합니다.
// SAMPLE INPUT / OUTPUT
// const isOdd = val => val % 2 !== 0;
// someRecursive([1,2,3,4], isOdd) // true
// someRecursive([4,6,8,9], isOdd) // true
// someRecursive([4,6,8], isOdd) // false
// someRecursive([4,6,8], val => val > 10); // false
function someRecursive(){
}
정답
더보기
// SAMPLE INPUT / OUTPUT
// const isOdd = val => val % 2 !== 0;
// someRecursive([1,2,3,4], isOdd) // true
// someRecursive([4,6,8,9], isOdd) // true
// someRecursive([4,6,8], isOdd) // false
// someRecursive([4,6,8], val => val > 10); // false
// 내 정답
function someRecursive(arr, func){
if (arr.length === 0) {
return false;
}
if(func(arr.pop())) {
return true
}
return someRecursive(arr, func)
}
// 정답지
function someRecursive(array, callback) {
if (array.length === 0) return false;
if (callback(array[0])) return true;
return someRecursive(array.slice(1),callback);
}
문제4
배열의 배열을 받아들이고 모든 값이 평활화(flattened)된 새 배열을 반환하는 flatten이라는 재귀(recursive ) 함수를 작성합니다.
function flatten(){
}
// flatten([1, 2, 3, [4, 5] ]) // [1, 2, 3, 4, 5]
// flatten([1, [2, [3, 4], [[5]]]]) // [1, 2, 3, 4, 5]
// flatten([[1],[2],[3]]) // [1,2,3]
// flatten([[[[1], [[[2]]], [[[[[[[3]]]]]]]]]]) // [1,2,3
정답
더보기
function flatten(oldArr) {
let newArr = [];
for (let i = 0; i < oldArr.length; i++) {
if (Array.isArray(oldArr[i])) {
newArr = newArr.concat(flatten(oldArr[i]));
} else {
newArr.push(oldArr[i]);
}
}
return newArr;
}
// flatten([1, 2, 3, [4, 5] ]) // [1, 2, 3, 4, 5]
// flatten([1, [2, [3, 4], [[5]]]]) // [1, 2, 3, 4, 5]
// flatten([[1],[2],[3]]) // [1,2,3]
// flatten([[[[1], [[[2]]], [[[[[[[3]]]]]]]]]]) // [1,2,3]
반응형
'Algorithm > Theory' 카테고리의 다른 글
버블 정렬 (Bubble Sort) 정렬 알고리즘 소개 (0) | 2024.07.14 |
---|---|
검색 알고리즘 (0) | 2024.07.10 |
재귀 연습 문제 (0) | 2024.07.09 |
재귀 (Recursion) (0) | 2024.07.08 |
문제 해결 패턴 연습 문제 (0) | 2024.07.01 |