[46일차] 재귀연습문제 - capitalizeFirst

저요·2022년 11월 7일

2022 100th day challenge

목록 보기
46/97

문제

capitalizeFirst

주어진 string의 배열의 각 문자의 첫번째를 대문자로 만들어서 반환해라.

keyword

  1. toUpperCase()

solution

나는 이 문제를 helper재귀를 사용해서 풀이했다.

  //데이터 수집 변수 선언
  let result = [];

먼저 다음과 같이 helper재귀에서 도출한 데이터를 수집할 변수를 선언했다.

  //내부 재귀함수 호출 
  function capitalizeFirstPrec(precArr){
      //만약에 배열의 길이가 0이라면 리턴
      if(precArr.length === 0) return;
      //배열을 받아서 첫번째의 배열 str을 사용
      let str = precArr[0];
      //str[0] 을 to Uppercase 한 뒤에 str.slice(1)과 합치고 데이터 수집변수에 입력
      result.push(str[0].toUpperCase().concat(str.slice(1)));
      //나머지 배열을 재귀함수에 호출
      capitalizeFirstPrec(precArr.slice(1));
  }
   

그리고 내부 재귀함수를 생성했다. 내부 재귀함수는 다음과 같은 순서로 작동한다.

재귀함수 작동법

  1. 먼저 배열이 남아있는지 길이를 확인한다. (없다면 return - 재귀함수 종료점)
  2. 첫번째 배열의 문자열을 임시로 변수에 저장한다.
  3. 문자열의 맨 처음을 toUpperCase()를 이용해 대문자로 변환한뒤에 나머지 문자열을 붙여 result에 push한다.
  4. capitalizeFirstPrec에 맨 앞을 제외한 새로운 배열로 재귀호출한다.

review

해답솔루션에는 위와같은 helper재귀를 사용하지 않고, 순수재귀만을 사용했다.

  if (array.length === 1) {
    return [array[0][0].toUpperCase() + array[0].substr(1)];
  }
  const res = capitalizeFirst(array.slice(0, -1));
  const string = array.slice(array.length - 1)[0][0].toUpperCase() + array.slice(array.length-1)[0].substr(1);
  res.push(string);
  return res;

해답 솔루션에서는 종료점을 0이 아닌 1로 두었다.

해답 솔루션 재귀 작동법

  1. 파라미터로 받은 배열이 마지막 하나가 남을 때까지 재귀를 호출 (다른 입력값, 종료점까지 직행)
  2. 종료점에서 첫 글자 대문자로 변환 후 return > res에 저장
  3. 배열의 마지막 인덱스의 string의 첫 글자를 대문자로 변환 후 res에 push, return
  4. res에 res를 return 했기 때문에 데이터는 사라지지 않고 남아있다.
  5. 반복

해답솔루션에서는 첫 글자 대문자화를 나처럼 문자 변수를 생성하는것이 아닌 이차원 배열의 표현식으로 선택해서 대문자로 만들었다.
또 여기서는 substr을 사용했는데, 나는 slice를 사용했다. 하지만 string에 대한 것이므로 substr이 더 용법에 맞을 것이다.

출처

https://www.udemy.com/share/105zfq3@sSW59P4YMYwEABOVMpPCWFpcfvN_0JbQqyJAOA_MPhMi9M1VSgJHhP9mNI0TLmJATA==/

profile
웹개발

0개의 댓글