본문 바로가기

자료구조알고리즘/코드스테이츠 Coplit

06_letterCapitalize

[ 문제 ]

문제 자체는 매우 간단하다. 입력받은 문자열의 각 단어 첫 글자를 대문자로 변경하여 반환하는 문제이다.

예를 들면, 'hello world'라는 문자열은 'hello'와 'world' 이렇게 두 단어로 이루어져있다.

이 단어들의 첫글자를 대문자로 변경한 "Hello World" 문자열을 반환하면 된다.

 

[ 풀이 ]

나의 로직은 다음과 같다. 

1/ 빈 문자열일 경우, 빈 문자열을 리턴한다.

2/ split 메서드를 이용하여 문자열 하나하나를 배열의 요소로 만든다.

3/ 반복문을 이용하여 전 요소가 " " 스페이스이면 새로운 스페이스, 혹은 새 단어의 시작이므로 toUpperCase메서드를 이용하여 대문자로 만든다.

 

function letterCapitalize(str) {
  if(str === ""){ //입력받은 문자열이 빈문자열일 경우, 빈문자열을 return한다.
    return "";
  }
  let arr = str.split(""); //변수를 선언하고, ""를 기준으로 split하여 배열로 만들어 할당한다.
  let result = arr[0].toUpperCase(); //첫 글자는 space 또는 무조건 대문자이므로 toUpperCase메서드를 이용하여 대문자로 만든다. 
  for(let i = 1; i < arr.length; i++){ //반복문은 index 1부터 시작한다.
    if(arr[i-1] === " "){ 
      result = result + arr[i].toUpperCase(); //전 index요소가 " " 즉, space일 경우 대문자로 만든다.
    } else {
      result = result + arr[i]; //전 index요소가 space가 아닐 경우엔 기존 result에 더한다.
    }
  }
  return result; //result값을 반환한다. 
}

 

이렇게 테스트통과는 했지만, 다시 생각해보면 굳이 배열로 나눌 필요가 있었나 싶다.

 

 

[ 레퍼런스 ]

레퍼런스를 보고, 아.. 이런 방법도 있구나.. 를 알게되었다.

예를 들어, 'javascript   is    good'를 입력받으면 아래의 코드에서 ['javascript', '', '', 'is', '', '', '', 'good'] 값이 된다.

let words = str.split(' ') //space가 한칸 들어가있다.

 

그럼 배열의 요소가 ''(빈문자열)인 경우, length === 0이 되므로, for문에 있는 if 조건문에 속하지 않는다.

즉 배열의 요소가 ''가 아닌, 문자열이 들어있을 경우에만 첫번째 글자를 toUpperCase로 대문자로 만들고,

substr 메소드를 이용하여 첫번째 글자를 제외시킨 나머지 문자열을 합하여 재할당한다.

그리고 반복문이 종료되면, join(" ")로 다시 배열의 요소를 문자열로 합친다.

 

역시, 레퍼런스를 보는 것도 공부가 많이 된다!

'자료구조알고리즘 > 코드스테이츠 Coplit' 카테고리의 다른 글

08_convertDoubleSpaceToSingle  (0) 2022.02.15
07_convertListToObject  (0) 2022.02.12
05_firstReverse  (0) 2022.02.09
04_firstCharacter  (0) 2022.02.07
03_powerOfTwo  (0) 2022.02.05