문제
선물 상자에 대한 정보를 담은 배열과 문자열을 입력받아 조건에 맞는 선물이 있는지 여부를 리턴해야 합니다.
입력
인자 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) {
// TODO: 여기에 코드를 작성합니다.
if(giftBox.length===0 || wish==='') return false; // 빈 배열이거나 빈 문자열이면 false
for(let i =0; i<giftBox.length; i++){
if(giftBox[i]===wish){
return true; // 원하는 선물이 있으면 true
}
if(Array.isArray(giftBox[i])===true){ //배열안에 배열이 하나 더 있으면 그 배열안에 원하는 선물이 있는지 확인
const result = unpackGiftbox(giftBox[i],wish);
if(result)
return true; //해당 되면 true
}
}
return false //해당 없으면 false
}
문제
다차원 배열을 입력받아 1차원 배열로 변환하여 리턴해야 합니다.
입력
인자 1 : arr
양의 정수 또는 배열을 요소로 갖는 다차원 배열 (입출력 예시 참고)
출력
배열을 리턴해야 합니다.
주의 사항
함수 flattenArr는 재귀함수의 형태로 작성합니다.
Array Method flat()과 flatMap() 사용은 금지됩니다.
반복문(for, while) 사용이 가능합니다.
입력받은 배열은 함수의 호출 뒤에도 처음 상태를 유지해야 합니다(immutability).
입력으로 전달되는 다차원 배열이 중첩된 정도(중첩의 깊이)는 정해져 있지 않습니다.
빈 배열을 입력받은 경우, 빈 배열을 리턴해야 합니다.
입출력예시
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]
코드
function flattenArr(arr) {
// TODO: 여기에 코드를 작성합니다.
let result=[]; //새로운 배열
for(let i = 0; i<arr.length; i++){
if(Array.isArray(arr[i])===false){
result.push(arr[i]);
}
else{
let output = flattenArr(arr[i]);
result.push(...output)
}
}
return result;
}
풀이
위 문제와 비슷하지만 새로운 배열을 리턴해야하는데 배열 안에 배열을 추가할 때 []가 그대로 출력되서 곤란 했다.
배열안에 다른 배열의 요소를 넣기 위해 Spread Operator 활용하여 배열안에 요소들을 추가 할 수 있다는것을 알게되었습니다.