TIL 27일차

희락·2021년 10월 7일

재귀에 대해 학습한 후 페어와 함께 재귀함수 코플릿 문제를 풀었다. 재귀는 재귀는 언제 사용하는 게 좋을까?
1. 주어진 문제를 비슷한 구조의 더 작은 문제로 나눌 수 있는 경우
2. 중첩된 반복문이 많거나 반복문의 중첩 횟수(number of loops)를 예측하기 어려운 경우
에 사용하기 좋다고 한다.오늘은 재귀 문제를 풀면서 고민을 했던 문제를 적어보려고 한다.

14번 문제 unpackGiftbox

문제

선물 상자에 대한 정보를 담은 배열과 문자열을 입력받아 조건에 맞는 선물이 있는지 여부를 리턴해야 합니다.

입력

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

출력

boolean 타입을 리턴해야 합니다.

주의 사항

함수 unpackGiftbox는 재귀함수의 형태로 작성합니다.
반복문(for, while) 사용이 가능합니다.
입력받은 배열은 함수의 호출 뒤에도 처음 상태를 유지해야 합니다(immutability).
빈 배열 또는 빈 문자열을 입력받은 경우, false를 리턴해야 합니다.

입출력 예시

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) {
//base case를 작성한다.
  if(giftBox.length === 0){
    return false
  }
  //giftbox가 배열이므로 각각 조회하기 위해 for문을 이용해 giftbox.length까지 돌린다.
  for(let i =0; i < giftBox.length; i++){
  //만약 giftbox의 i번째 index에 wish가 있다면 true를 리턴한다.
    if(giftBox[i] === wish){
      return true
    }
    //giftBox[i]가 배열일시 재귀함수로 호출해준다.
    if(Array.isArray(giftBox[i])){
      let temp = unpackGiftbox(giftBox[i], wish)
    //wish가 발견된다면 true를 리턴한다.
      if(temp ){
        return true
      }
    }
  }
  return false
}코드를 입력하세요

재귀 문제를 풀면서 내가 이해를 진짜 한건지 외워서 적는건지 헷갈린다 ^^하하하.. 오늘 푼 문제를 다시 처음부터 풀어봐야겠다.

Today's Key🔑

  1. 모든 재귀 함수는 반복문(while 문 또는 for 문)으로 표현할 수 있다.
  2. 재귀를 적용할 수 있는 대부분의 경우에는, 재귀를 적용한 코드가 더욱 간결하고 이해하기 쉽다.
  3. 코플릿 재귀 부분 다시 풀어볼것!
profile
컴맹이의 개발자 되기 프로젝트

0개의 댓글