
코드스테이츠 과제 코드를 공부 목적으로 변형 해서 정리 하였습니다.
✅문제
수(num)와 배열을 입력받아 차례대로 num개의 요소만 포함된 새로운 배열을 리턴해야 합니다.
⛔주의
- 함수 take는 재귀함수의 형태로 작성합니다.
- 반복문(for, while) 사용은 금지됩니다.
- 입력받은 배열은 함수의 호출 뒤에도 처음 상태를 유지해야 합니다(immutability).
💬입출력 예시
let output = take(2, [1, -2, 1, 3]);
console.log(output); // --> [1, -2]
output = take(5, [1, -2, 1, 3]);
console.log(output); // --> [1, -2, 1, 3]
🍀문제코드
function take(num, arr) {
// TODO: 여기에 코드를 작성합니다.
}
🍀해결코드
function take(num, arr) {
if(arr.length ===0 ){
return []
}
if(num === 0 ){
return []
}
return [arr.shift()].concat(take(num-1,arr))
}
🦦해설
take(2, [1, -2, 1, 3])을 예로 들어 보겠다.
재귀의 마지막은 언제일까를 먼저 생각해 보았다.
첫번째 인자 num의 값이 0으로 될때를 마지막으로 생각했다.
재귀로 보내지 않을 값은 무엇일까 생각을 했다.
배열의 0번째 요소는 남기고 싶었다.
재귀로 보낼때 변화를 줄건 어떤것일까 생각을 했다.
num은 0이 되어야 하니 1씩 빼주고, 배열의 0번째 요소도 계속 바꿔야 하기 때문에 배열의 0번째 요소도 빼야한다 생각을 했다.
그래서 take코드는 다음처럼 나왔다.
function take(num, arr) {
if(arr.length ===0 ){
return []
}
//num이 0일 경우 재귀 종료
if(num === 0 ){
return []
}
//arr의 0번째 요소는 arr.shift로 보관
//재귀를 보내는 함수는 num을 1빼고 shift가 끝난 arr을 보냄
//이때 재귀가 끝나고 돌아오는 함수는 배열의 형태로 보내지고 concat으로 이전의 남겨둔 요소와 함쳐짐
return [arr.shift()].concat(take(num-1,arr))
}
'프론트엔드 > 코딩노트' 카테고리의 다른 글
| [백준]1292/쉽게 푸는 문제/JavaScript (0) | 2022.11.02 |
|---|---|
| [백준] 2693/N번째 큰 수/JavaScript (0) | 2022.11.02 |
| [코플릿] 배열을 입력 받아 3개의 요소를 곱해 나올 수 있는 최대값 (0) | 2022.10.20 |
| [코플릿] 다차원 배열 평평하게 (0) | 2022.10.20 |
| [코드스테이츠 과제] fetch API (0) | 2022.09.27 |