LeeWang_31
이왕31
LeeWang_31
전체 방문자
오늘
어제
  • 분류 전체보기 (234)
    • 프로젝트 (2)
      • 사이드 프로젝트 (2)
      • Codestates_pre_project (0)
    • 프론트엔드 (169)
      • Html (19)
      • CSS (18)
      • JavaScript (29)
      • Codestates (76)
      • 코딩노트 (27)
    • 백엔드 (10)
      • node (10)
    • 구르는 돌 🌑 (16)
      • Codestates (11)
      • 생각 (4)
      • 공부 흔적 (1)
    • 정보 (18)
      • 오류노트 (2)
      • 인텔리제이 정보 (9)
      • 깃 정보 (3)
      • 기타 정보 (4)
      • 안드로이드스튜디오 정보 (0)
    • CS (7)
      • 이론공부 (7)
    • App (6)
      • Android (3)
      • Kotlin (3)
    • 컴퓨터 수학 (5)
      • 암호론 (5)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 코딩애플
  • 백준
  • 안드로이드스튜디오파이어베이스
  • ubuntu
  • DP
  • 사용자친화웹
  • 번들링
  • 웹팩
  • figjam
  • 자바스크립트
  • 2609
  • 파이어베이스연동
  • 1292
  • React
  • 안드로이드스튜디오범블비
  • html
  • 알고리즘
  • TODOlist
  • 코드스테이츠
  • 코플릿
  • UI/UX
  • 2693
  • JavaScript
  • codestate
  • linuix 코드스테이츠
  • 생활코딩
  • 사용자 친화 웹
  • 사이드프로젝트
  • linux
  • css

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
LeeWang_31

이왕31

[코플릿 - 재귀]num개의 요소만 포함된 배열
프론트엔드/코딩노트

[코플릿 - 재귀]num개의 요소만 포함된 배열

2022. 10. 20. 17:00

코드스테이츠 과제 코드를 공부 목적으로 변형 해서 정리 하였습니다.

✅문제

수(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
    '프론트엔드/코딩노트' 카테고리의 다른 글
    • [백준]1292/쉽게 푸는 문제/JavaScript
    • [백준] 2693/N번째 큰 수/JavaScript
    • [코플릿] 배열을 입력 받아 3개의 요소를 곱해 나올 수 있는 최대값
    • [코플릿] 다차원 배열 평평하게
    LeeWang_31
    LeeWang_31
    이왕 할 거면 기분 좋게

    티스토리툴바