알고리즘 6번 letterCapitalize

Judo·2020년 11월 15일
1
post-thumbnail

문제


문자열을 입력받아 문자열을 구성하는 각 단어의 첫 글자가 대문자인 문자열을 리턴해야 합니다.

주의사항


  • 단어는 공백 한 칸으로 구분합니다.
  • 연속된 공백이 존재할 수 있습니다.
  • 빈 문자열을 입력받은 경우, 빈 문자열을 리턴해야 합니다.

풀이 코드


내가 푼 코드

function letterCapitalize(str) {
  // TODO: 여기에 코드를 작성합니다.
  /** 
   * 1.문자열을 입력받는다.
   * 2.문자열의 각 단어에 접근한다.
   *   - str을 split을 이용해 배열로 바꾼다.
   * 3.각 단어의 첫 번째 문자를 대문자로 바꾼다.
   *   - arr[i][0]가 각 단어의 첫 번째 단어다.
   *   - arr[i][0]을 toUpperCase를 이용해 바꾸고 나머지는 slice를 이용해 복사해온다.
   *   - newArr을 join()을 이용해 string으로 다시 바꾼다. 
   * 4.바꾼 문자열을 return 한다.
   *   - newArr 을 리턴한다.
   * 
   */ 
    if(str.length === 0){
      return '';
    }
    
    const newStr = str.split(' ');
    
    const newArr = newStr.map(function(ele){
      if(ele  === ''){
        return ele.toUpperCase();
      }
      return ele[0].toUpperCase() + ele.slice(1);
    });

레퍼런스 코드

function letterCapitalize(str) {
  let words = str.split(' ');

  for (let i = 0; i < words.length; i++) {
    if (words[i].length > 0) {
      words[i] = words[i][0].toUpperCase() + words[i].substr(1);
    }
  }

  str = words.join(' ');
  return str;
}

어려웠던 점 , KEY


내가 푼 코드에서 str.split(' ') 했을 때 const newStr === ['','','abc',''..]; 이렇게 저장이 된다. 그 후 newStr.map()을 적용하여 각 요소에 접근해 ele[0].toUpperCase()를 적용하려고 했다. 하지만 계속해서 undefined가 나왔고 이유를 찾아보니 newStr의 첫 번째 요소인 ''부분은 ele 그 자체였고 ele[0]으로 접근할 경우 undefined 값이 나오는 것이었다.
값이 없으니 당연히 undefined가 나와는게 맞았다.
그래서 map() 안에서 분기를 나눠 ''인 경우와 아닌 경우로 나눠서 처리를 해줬다.

배운점


레퍼런스 코드를 보면 str을 배열 words로 만들어준 이후 words[i].length > 0을 이용해 ''부분을 걸러내고 문자열이 있는 요소에만 대문자로 바꿔주었다. 그 이후 words.join()을 이용해 기존에 요소들을 문자열로 연결시켜주었다. 레퍼런스 코드가 더 간단하고 가독성이 좋다.

profile
즐거운 코딩

0개의 댓글