[S3U1 자료구조 알고리즘 재귀]

차재현·2023년 2월 14일

findMatryoshka

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

입력
인자 1 : matryoshka
'matryoshka', 'size' 속성을 갖는 재귀적으로 정의된 객체 (입출력 예시 참고)
matryoshka.matryoshka는 null 또는 matryoshka 객체
matryoshka.size는 중첩될수록 작아집니다.
인자 2 : size
number 타입의 수
출력
boolean 타입을 리턴해야 합니다.
주의 사항
함수 findMatryoshka는 재귀함수의 형태로 작성합니다.
반복문(for, while) 사용은 금지됩니다.
입력받은 객체는 함수의 호출 뒤에도 처음 상태를 유지해야 합니다(immutability).
빈 객체를 입력받은 경우, false를 리턴해야 합니다.

function findMatryoshka(matryoshka, size) {
if (matryoshka.size === size) {
return true
} else if (matryoshka.matryoshka && matryoshka.size > size) {//matryoshka.matryoshka=인형 안의 인형
return findMatryoshka(matryoshka.matryoshka, size)
}
return false
}

take

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

입력
인자 1 : num
number 타입의 정수 (num >= 0)
인자 2 : arr
임의의 요소를 갖는 배열
출력
순차적으로 num 개의 요소로 구성된 배열을 리턴해야 합니다.
주의 사항
함수 take는 재귀함수의 형태로 작성합니다.
반복문(for, while) 사용은 금지됩니다.
입력받은 배열은 함수의 호출 뒤에도 처음 상태를 유지해야 합니다(immutability).

function take(num, arr) {
if(num===arr.length){
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))
}

unpackGiftbox

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

입력
인자 1 : giftBox
문자열, 배열을 요소로 갖는 재귀적으로 정의된 배열 (입출력 예시 참고)
문자열은 선물 상자에 들어있는 각 선물의 이름을 의미합니다.
배열은 더 작은 선물 상자를 의미합니다.
인자 2 : wish
string 타입의 문자열
출력
boolean 타입을 리턴해야 합니다.
주의 사항
함수 unpackGiftbox는 재귀함수의 형태로 작성합니다.
반복문(for, while) 사용이 가능합니다.
입력받은 배열은 함수의 호출 뒤에도 처음 상태를 유지해야 합니다(immutability).
빈 배열 또는 빈 문자열을 입력받은 경우, false를 리턴해야 합니다.

function unpackGiftbox(giftBox, wish) {
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
}

profile
신입

0개의 댓글