문제
입력
인자 1 : arr
임의의 타입을 요소로 갖는 배열
출력
number 타입을 리턴해야 합니다.
arr.length
주의 사항
함수 arrLength는 재귀함수의 형태로 작성합니다.
반복문(for, while) 사용은 금지됩니다.
입력받은 배열은 함수의 호출 뒤에도 처음 상태를 유지해야 합니다(immutability).
arr.length 사용은 금지됩니다.
arr.isEmpty()를 통해 배열이 비어있는지 확인할 수 있습니다.
해당 메소드는 표준 자바스크립트 내장 메소드가 아니며, 문제를 위해 새롭게 정의된 커스텀 메소드입니다. 이 문제에서만 사용하시길 바랍니다.
[ ].isEmpty() === true
[1, 2].isEmpty() === false
빈 배열의 길이는 0입니다.
입출력 예시
1 let output = arrLength([1, -2, 1, 3]);
2 console.log(output); // --> 4
내가 작성한 Code
function arrLength(arr) {
// TODO: 여기에 코드를 작성합니다.
if (arr.isEmpty(arr)=== true ){ // arr이 빈 배열이 true 면
return 0 // 리턴 0 Base Case
}
const result = arr.slice(1); // arr배열의1을 result로
return 1 + arrLength(result); // 1+ result Recusion Case
}
Reference Code
function arrLength(arr) {
if (arr.isEmpty()) {
return 0;
}
// const [head, ...tail] = arr;
const tail = arr.slice(1);
return 1 + arrLength(tail);
}
문제
입력
인자 1 : arr
임의의 요소를 갖는 배열
출력
순서가 뒤집힌 배열을 리턴해야 합니다.
[arr[n-1], arr[n-2], ... , arr[0]]
arr.length는 n
주의 사항
함수 reverseArr는 재귀함수의 형태로 작성합니다.
반복문(for, while) 사용은 금지됩니다.
입력받은 배열은 함수의 호출 뒤에도 처음 상태를 유지해야 합니다(immutability).
빈 배열은 빈 배열 그대로를 리턴해야 합니다.
입출력 예시
1 let output = reverseArr([1, 2, 3]);
2 console.log(output); // --> [3, 2, 1]
내가 작성한 Code
function reverseArr(arr) {
// TODO: 여기에 코드를 작성합니다.
if(arr.length === 0){ //arr배열의 길이가 0이면
return []; //빈 배열을 리턴 Base Case
}
const head = arr[arr.length-1]; // head를 선언하고 head는 arr배열의 마지막요소
const tail = arr.slice(0,arr.length-1); // arr배열의 0번째 인덱스를 마지막에 넣는다
return [head].concat(reverseArr(tail)) // Recusion Case
}
Reference Code
function reverseArr(arr) {
if (arr.length === 0) {
return [];
}
// const [head, ...tail] = arr;
const head = arr[0];
const tail = arr.slice(1);
return reverseArr(tail).concat(head);
}
문제
입력
인자 1 : arr
양의 정수 또는 배열을 요소로 갖는 다차원 배열 (입출력 예시 참고)
출력
배열을 리턴해야 합니다.
주의 사항
함수 flattenArr는 재귀함수의 형태로 작성합니다.
Array Method flat()과 flatMap() 사용은 금지됩니다.
반복문(for, while) 사용이 가능합니다.
입력받은 배열은 함수의 호출 뒤에도 처음 상태를 유지해야 합니다(immutability).
입력으로 전달되는 다차원 배열이 중첩된 정도(중첩의 깊이)는 정해져 있지 않습니다.
빈 배열을 입력받은 경우, 빈 배열을 리턴해야 합니다.
입출력 예시
1 let output = flattenArr([[1], 2, [3, 4], 5]);
2 console.log(output); // --> [1, 2, 3, 4, 5]
3
4 output = flattenArr([[2, [[3]]], 4, [[[5]]]]);
5 console.log(output); // --> [2, 3, 4, 5]
내가 작성한 Code
function flattenArr(arr) {
// TODO: 여기에 코드를 작성합니다.
const result = []; // 빈 배열을 선언하고
for(let i=0; i<arr.length; i++){ // 반복문을 돌려서
if(Array.isArray(arr[i])){ // arr[i] 인덱스가 배열이면
const arr1 = flattenArr(arr[i]) // arr1을 선언하고 arr[i] 인덱스를 빼서
result.push(...arr1); //result에 푸시해준다
}else{ // 그렇지 않다면
result.push(arr[i]) // result에 arr[i]를 푸시한다 Base Case
}
}return result; // Recusion Case
}
Reference Code
function flattenArr(arr) {
// base case
if (arr.length === 0) {
return [];
}
// recursive case
const head = arr[0];
const tail = arr.slice(1);
if (Array.isArray(head)) {
return flattenArr([...head, ...tail]);
} else {
return [head].concat(flattenArr(tail));
}
}