재규어 문제 2

야 나 개 ·2021년 11월 9일
0

진짜 재귀에 맛을 보여줄께~~ 야호

참조형자료 문제들은 이렇게 풀어줘

5번문제

배열을 입력받아 모든 요소의 합을 리턴해야 합니다.

예시

let output = arrSum([-1, -2, 1, 3]);
console.log(output); // --> 1

수도코드
1.베이직코드 : 0일때 멈춰라
2.배열의 하나 하나 를 꺼낼수 있어야함

정답코드

function arrSum(arr) {
  // TODO: 여기에 코드를 작성합니다.
  if(arr.length === 0){
    return 0;
  }
  const head = arr[0];
  const tail = arr.slice(1);

  return head + arrSum(tail)


}

6번문제

배열을 입력받아 모든 요소의 곱을 리턴해야 합니다.

사실 앞 문제랑 똑같음 넘어갈께

7번문제

배열을 입력받아 그 길이를 리턴해야 합니다.

주의 사항
함수 arrLength는 재귀함수의 형태로 작성합니다.
반복문(for, while) 사용은 금지됩니다.
입력받은 배열은 함수의 호출 뒤에도 처음 상태를 유지해야 합니다(immutability).
arr.length 사용은 금지됩니다.
arr.isEmpty()를 통해 배열이 비어있는지 확인할 수 있습니다.
해당 메소드는 표준 자바스크립트 내장 메소드가 아니며, 문제를 위해 새롭게 정의된 커스텀 메소드입니다. 이 문제에서만 사용하시길 바랍니다.
[ ].isEmpty() === true
[1, 2].isEmpty() === false
빈 배열의 길이는 0입니다.

입출력 예시

let output = arrLength([1, -2, 1, 3]);
console.log(output); // --> 4

수도코드
1.최초의 경우는 어레이가 빈배열일 경우
2.배열일 경우는 하나씩 잘라가면서 0이 될때까지 짜르고
3.1씩 더해준다.

정답코드

function arrLength(arr) {
  // TODO: 여기에 코드를 작성합니다.

  // 최소단위가 0인경우
  if(arr.isEmpty() === true){
    return 0;
  }
  const head = arr[0];
  const tail = arr.slice(1);

  return 1 + arrLength(tail);
}

8번문제

수(num)와 배열을 입력받아 차례대로 num개의 요소가 제거된 새로운 배열을 리턴해야 합니다.

예시

let output = drop(2, [1, -2, 1, 3]);
console.log(output); // --> [1, 3]

output = drop(5, [1, -2, 1, 3]);
console.log(output); // --> [ ]

수도코드
1.최소의 경우는 num 0인경우
빈배열일 경우
2.하나씩 짤라가면서 재귀해준다.

정답코드

function drop(num, arr) {
  // TODO: 여기에 코드를 작성합니다.
  if(arr.length === 0 || num === 0){
    return arr;
  }
  const head = arr[0];
  const tail = arr.slice(1);

  return drop(num - 1, tail)

}

9번문제

수(num)와 배열을 입력받아 차례대로 num개의 요소만 포함된 새로운 배열을 리턴해야 합니다.

예시

let output = take(2, [1, -2, 1, 3]);
console.log(output); // --> [1, -2]

output = take(5, [1, -2, 1, 3]);
console.log(output); // --> [1, -2, 1, 3]

수도코드
8번문제와는 반대이다.
1.최소의 경우는 0이면 빈배열, 빈배열이 경우는 빈배열
2. 똑같이 반복

정답코드

function take(num, arr) {
  // // TODO: 여기에 코드를 작성합니다.
  // if(arr.length <= num ){
  //   return arr
  // }

  if(num === 0 || arr.length === 0){
    return []
  }

  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); // --> true

output = and([true, true, false]);
console.log(output); // --> false

쉽게 말해 배열에 false가 있으면 전부 false다

수도 코드
1. 빈배열은 투루
2. 투루면 또 검사해라
3. false가 있으면 false

정답코드

function and(arr) {
  // TODO: 여기에 코드를 작성합니다.
  // 최초의 경우수 빈배열이면 투루, 투루면 또 검사해라, false일때 멈춰라
  if(arr.length === 0){
    return true;
  }
  const head = arr[0];
  const tail = arr.slice(1);

  if(head === true){
    return and(tail)
  }

  return false

}

11번문제

배열을 입력받아 모든 요소의 논리합(or)을 리턴해야 합니다.

위문제랑 반대다. 이것도 건너뛰자

12번문제

배열을 입력받아 순서가 뒤집힌 배열을 리턴해야 합니다.

수도코드
1.거꾸로 보일러가 생각난다.
2.head를 배열의 마지막으로 하고
3.슬라이스를 맨마지막뒤를 짜른다.

정답코드

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번문제

러시아 전통인형 마트료시카에 대한 정보를 담은 객체와 수를 입력받아 조건에 맞는 인형이 있는지 여부를 리턴해야 합니다.

예시

const matryoshka = {
  size: 10,
  matryoshka: {
    size: 9,
    matryoshka: null,
  },
};

let output = findMatryoshka(matryoshka, 10);
console.log(output); // --> true

output = findMatryoshka(matryoshka, 8);
console.log(output); // --> false

수도코드
1.마트로시카 사이즈가 맞는지 확인한다.
2.맞지않다면, 마르로시카의 마트로시캬의 사이즈가 크다면 다시 검사하고,
3. 사이즈가 작거나 없다면 false 해라

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;
}
profile
야 나도 개발자 될 수 있어

0개의 댓글