let output = sumTo(10);
function sumTo(num) {
// 별도의 최적화 기법(memoization)은 금지됩니다.
// basecase
if(num <= 1) {
return num;
} else {
return num+sumTo(num-1);
}
}
let output = isOdd(17);
console.log(output); // -> true
function isOdd(num) {
// 0일경우 짝수니깐 false
if (num === 0) {
return false;
// 1일경우 true
} else if (num === 1) {
return true;
// 음수일경우 양수로 만들어줌
} else if (num < 1) {
return isOdd(-num);
} else {
return isOdd(num-2);
}
}
let output = fibonacci(5);
console.log(output); // -> 5
function fibonacci(num) {
// 별도의 최적화 기법(memoization)은 금지됩니다.
if (num <= 1) {
return num;
} else if (num >= 1 && num <= 15){
// 피보나치 n = (n-1) + (n-2)
return fibonacci(num-1) + fibonacci(num-2);
}
}
let output = arrSum([-1, -2, 1, 3]);
console.log(output); // --> 1
function arrSum(arr) {
if (arr.length === 0) {
return 0;
} else {
// 배열의 첫번째를 계속 쪼개면서 더하기
return arr.shift() + arrSum(arr);
}
}
let output = drop(2, [1, -2, 1, 3]);
console.log(output); // --> [1, 3]
function drop(num, arr) {
if (arr.length === 0) {
return [];
// num이 0이 된경우 arr 반환
} else if (num === 0) {
return arr;
} else {
//num이 0이 되거나 배열에 아무것도 없을때까지 반복.
//배열의 앞요소를 제거한 새로운 배열
let newArr = arr.slice(1);
return drop(num - 1, newArr);
}
}
const matryoshka = {
size: 10,
matryoshka: {
size: 9,
matryoshka: null,
},
};
let output = findMatryoshka(matryoshka, 10);
console.log(output); // --> true
function findMatryoshka(matryoshka, size) {
// 빈 객체를 확인하는 문
if( matryoshka === null) {
return false;
// Object.keys(객체)넣어주면 배열로 사용가능
} else if (Object.keys(matryoshka).length === 0){
return false;
// matryoshka 객체에 size와 같은 값이 있다면
} else if(matryoshka.size === size) {
return true;
// matryoshka 객체 안에 또다른 객체를 찾기 위한 코드
} else {
return findMatryoshka(matryoshka.matryoshka, size);
}
}
const object1 = {
a: 'somestring',
b: 42,
c: false
};
console.log(Object.keys(object1));
// Expected output: Array ["a", "b", "c"]
const giftBox = ['macbook', 'mugcup', ['eyephone', 'postcard'], 'money'];
let output = unpackGiftbox(giftBox, 'iphone');
console.log(output); // --> false
output = unpackGiftbox(giftBox, 'postcard');
console.log(output); // --> true
function unpackGiftbox(giftBox, wish) {
if (wish === '' || giftBox.length === 0 ) {
return false;
}
for(let i = 0; i <= giftBox.length; i++){
//giftbox 배열안에 wish와 같은게 있을경우
if(giftBox[i] === wish) {
return true
// giftbox 배열의 배열안에 wish와 같은게 있을경우
// -> 배열인지 아닌지르 판단하기위해 Array.isArray 메서드 사용
} else if (Array.isArray(giftBox[i])) {
const result = unpackGiftbox(giftBox[i], wish)
if (result){
return true;
}
}
}
// giftbox에 어떠한 값도 wish와 같지 않은 경우
return false;
}
let output = flattenArr([[1], 2, [3, 4], 5]);
console.log(output); // --> [1, 2, 3, 4, 5]
function flattenArr(arr) {
// 빈배열일때 빈배열 리턴
const result = []
if(arr.length === 0 ) {
return result;
}
//반복문을 돌리면서 arr에 또다른 배열있는 확인
for(let i = 0; i < arr.length; i++) {
// arr에 배열이 있다면
if(Array.isArray(arr[i])) {
const newArr = flattenArr(arr[i]);
result.push(...newArr);
// arr에 배열이 없다면 그대로 리턴하게 만들어주기
} else {
result.push(arr[i]) ;
}
}
// 반복문이 끝난뒤 각 조건에 따른 새로운 배열 리턴
return result;
}