재귀 Coplit

const_yang·2021년 9월 12일
0

TIL

목록 보기
3/14
post-thumbnail

- Coplit 01

수(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]

- 나의 풀이

1) 배열 첫 요소에 slice(1) 배열의 첫 요소를 붙인다.
2) base case:
재귀를 탈출하기 위한 결과값은 빈 배열로 한다. num개의 요소를 붙여야 하므로 num을 -1씩 줄이고, num이 0이 되면 []를 리턴한다.
3) 빈 배열을 입력받은 경우에도 []를 리턴해야한다.
if (num === 0) return []
4) recursive case return [arr[0]].concat(함수(arr.slice(1))

function take(num, arr) {
  if (num === 0 || arr.length === 0) {
    return []
  }
  const head = arr[0]
  const tail = arr.slice(1)
  return [head].concat(take(num-1, tail)
}

- Coplit 02

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

- 입출력 예시

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) matryoshka.sizesize와 일치하는 경우 true를 리턴한다. (base case)
2) matryoshka.matryoshka에 값이 있고 matryoshka.sizesize 보다 큰 경우, 재귀하여 base case로 확인한다. (recursive case)

function findMatryoshka(matryoshka, size) {
  if (matryoshka.size === size) {
    return true;
  } else if (matryoshka.matryoshka && matryoshka.size > size) {
    return findMatryoshka (matryoshka.matryoshka, size);
    }
    return false;
  }

- Coplit 03

다차원 배열을 입력받아 1차원 배열로 변환하여 리턴해야 합니다.

- 입출력 예시

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

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

- 나의 풀이

1) arr 인자의 요소를 for문으로 조회한다.
2) 빈 배열에 arr 인자의 요소가 숫자인 경우 push하여 추가한다.
3) 숫자가 아니고 배열인 경우, 해당 배열을 함수로 재귀하여 for문으로 다시 조회한다
4)

function flattenArr(arr) {
  let result = []
  for(let i =0; i < arr.length; i++) {
    if (typeof arr[i] === 'number') {
      result.push(arr[i]);
    } else if (Array.isArray(arr[i])) {
      result+= result.concat(flattenArr(arr[i]))
    } return result;
  }

0개의 댓글