재규어 문제 3

야 나 개 ·2021년 11월 9일
0

하.. 재규어가 재규어가 아니라

반복문 속에 재귀를 하는 개념을 익히기 위해
(진짜 썸네일 사진이랑 이번문제랑 너무 찰떡)

그럼 달려보자 빵빵

14번문제

문자열, 배열을 요소로 갖는 재귀적으로 정의된 배열 (입출력 예시 참고)
문자열은 선물 상자에 들어있는 각 선물의 이름을 의미합니다.
배열은 더 작은 선물 상자를 의미합니다.

예시

const giftBox = ['macbook', 'mugcup', ['eyephone', 'postcard'], 'money'];

let output = unpackGiftbox(giftBox, 'iphone');
console.log(output); // --> false

output = unpackGiftbox(giftBox, 'postcard');
console.log(output); // --> true

수도코드
1.반복적으로 배열의 값이 같은지 확인한다.
2.검사하다가 배열을 만나면 배열이면 다시 반복시켜주는데
3.원본배열이 바뀌지 않도록 변수에 담아줘서 해야한다.

정답코드

function unpackGiftbox(giftBox, wish) {
  // TODO: 여기에 코드를 작성합니다.

  // 기본 확인 
  
  for(let i = 0; i < giftBox.length; i++){
    if(giftBox[i] === wish){
      return true;
    }else if (Array.isArray(giftBox[i])){
      const result = unpackGiftbox(giftBox[i],wish)
      if(result === true){
        return true 
      }
    }
  }
  return false;
}

15번문제

다차원 배열을 입력받아 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.반복한다. 배열의 인덱스 값을 계속 푸쉬한다.
2.그리고 배열을 만날경우
그것을 배열을 반복한다. 그리고 반복을 열고 푸쉬한다.

정답코드

function flattenArr(arr) {
  // TODO: 여기에 코드를 작성합니다.
  
  const result = [];

  for(let i = 0; i < arr.length; i++){
     if(Array.isArray(arr[i])){
       const newArr = flattenArr(arr[i])
       result.push(...newArr)
     }else{
       result.push(arr[i])
     }
  }
  return result;
}

하 불태웠다.

profile
야 나도 개발자 될 수 있어

0개의 댓글