1. 수(num)를 입력받아 1부터 num까지의 합을 리턴해야 합니다.
function sumTo(num) {
if (num <= 1) {
return num;
}
return num + sumTo(num - 1);
}
2. 수를 입력받아 홀수인지 여부를 리턴해야 합니다
fuction isOdd(num){
if(num === 0) {
return false;
} else if (num === 1){
return true;
}
if (num < 0){
return isOdd(-num);
}
return isOdd(num -2);
3. 수를 입력받아 n-factorial(n!: 엔-팩토리얼) 값을 리턴해야 합니다. n!은 1부터 n까지 1씩 증가한 모든 값의 곱입니다.
function factorial(num){
if(num <= 1) {
return 1;
}
return num * factorial(num -1);
}
4. 수(num)를 입력받아 피보나치 수열의 num번째 요소를 리턴해야 합니다.
0번째 피보나치 수는 0이고, 1번째 피보나치 수는 1입니다. 그 다음 2번째 피보나치 수부터는 바로 직전의 두 피보나치 수의 합으로 정의합니다.
0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, ...
function fibonacci(num) {
if (num <= 1) {
return num;
}
return fibonacci(num - 1) + fibonacci(num - 2);
}
5. 배열을 입력받아 모든 요소의 합을 리턴해야 합니다.
function arrSum(arr) {
if (arr.length === 0) {
return 0;
}
// const [head, ...tail] = arr;
const head = arr[0];
const tail = arr.slice(1);
return head + arrSum(tail);
}
6. 배열을 입력받아 모든 요소의 곱을 리턴해야 합니다.
function arrProduct(arr) {
if (arr.length === 0) {
return 1;
}
// const [head, ...tail] = arr;
const head = arr[0];
const tail = arr.slice(1);
return head * arrProduct(tail);
}
7. 배열을 입력받아 그 길이를 리턴해야 합니다.
function arrLength(arr) {
if (arr.isEmpty()) {
return 0;
}
// const [head, ...tail] = arr;
const tail = arr.slice(1);
return 1 + arrLength(tail);
}
8. 수(num)와 배열을 입력받아 차례대로 num개의 요소가 제거된 새로운 배열을 리턴해야 합니다.
function drop(num, arr) {
// if (num >= arr.length) {
// return [];
// }
if (num === 0 || arr.length === 0) {
return arr;
}
// const [head, ...tail] = arr;
const tail = arr.slice(1);
return drop(num - 1, tail);
}
9. 수(num)와 배열을 입력받아 차례대로 num개의 요소만 포함된 새로운 배열을 리턴해야 합니다.
function take(num, arr) {
// if (num >= arr.length) {
// return arr;
// }
if (num === 0 || arr.length === 0) {
return [];
}
// const [head, ...tail] = arr;
const head = arr[0];
const tail = arr.slice(1);
return [head].concat(take(num - 1, tail));
}
10. 배열을 입력받아 모든 요소의 논리곱(and)을 리턴해야 합니다.
let output = and([true, true, true]); console.log(output);
function and(arr) {
const head = arr[0];
const tail = arr.slice(1);
if(arr.length ===0){
return true;
}
else if (head === false){
return false;
}
return and(tail);
};
11. 배열을 입력받아 모든 요소의 논리합(or)을 리턴해야 합니다.
function or(arr) {
if (arr.length === 0) {
return false;
}
// const [head, ...tail] = arr;
const head = arr[0];
const tail = arr.slice(1);
// if (head === true) {
// return true;
// }
return head || or(tail);
}
12. 배열을 입력받아 순서가 뒤집힌 배열을 리턴해야 합니다.
function reverseArr(arr) {
// TODO: 여기에 코드를 작성합니다.
if(arr.length === 0){
return arr;
}
const head = arr[arr.length - 1];
const tail = arr.slice(0,arr.length - 1);
return [head].concat(reverseArr(tail))
}
13. 러시아 전통인형 마트료시카에 대한 정보를 담은 객체와 수를 입력받아 조건에 맞는 인형이 있는지 여부를 리턴해야 합니다.
function findMatryoshka(matryoshka, size) {
// TODO: 여기에 코드를 작성합니다.
if(matryoshka.size === size){
return true;
}else if(matryoshka.matryoshka && matryoshka.size > size){
return findMatryoshka(matryoshka.matryoshka, size)
}
return false;
}
14. 선물 상자에 대한 정보를 담은 배열과 문자열을 입력받아 조건에 맞는 선물이 있는지 여부를 리턴해야 합니다.
function unpackGiftbox(giftBox, wish) {
// TODO: 여기에 코드를 작성합니다.
if(giftBox.length === 0 || wish === ''){
return false;
}
for (let i = 0; i < giftBox.length; i++) {
if (giftBox[i] === wish) {
return true;
}
if (Array.isArray(giftBox[i])) {
const result = unpackGiftbox(giftBox[i], wish);
if (result) {
return true;
}
}
}
return false;
}
15. 다차원 배열을 입력받아 1차원 배열로 변환하여 리턴해야 합니다.
function flattenArr(arr) {
// base case
if (arr.length === 0) { // 빈 배열일 경우 빈 배열을 리턴
return [];
}
// recursive case
const head = arr[0];
const tail = arr.slice(1);
if (Array.isArray(head)) {
return flattenArr([...head, ...tail]); // 한 배열안에 다 넣어줌
} else {
return [head].concat(flattenArr(tail));
}
}
'프로그래밍 > 알고리즘' 카테고리의 다른 글
정렬 알고리즘(퀵 정렬, 배열 정렬, 힙정렬) (0) | 2022.09.06 |
---|---|
정렬알고리즘(선택정렬, 삽입정렬, 버블정렬) (0) | 2022.09.05 |
Tree 자료구조 (0) | 2022.08.16 |
프론트엔드 개발자에게 알고리즘 공부가 미치는 영향 (0) | 2022.04.25 |
파이썬 쉬운 예제 공부 사이트 추천(Feat.초보) (0) | 2022.04.13 |
댓글