상세 컨텐츠

본문 제목

알고리즘 문제풀이 - letterCapitalize

Programming Language/JavaScript

by Yongari 2022. 12. 20. 18:42

본문

 

문제 설명 : 

이번 문제는 문자열을 입력받고 문자열을 구성하는 각 단어의 첫 글자가 대문자인 문자열을 리턴하는 문제였다.

 

문제

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

입력

인자 1 : str

  • string 타입의 공백이 있는 알파벳 문자열


출력

  • string 타입을 리턴해야 합니다.


주의 사항

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


입출력 예시

let output1 = letterCapitalize('hello world');
console.log(output1); // "Hello World"
let output2 = letterCapitalize('javascript  is sexy ');
console.log(output2); // "Javascript  Is Sexy "

 

 

풀이 코드 설명

나의 첫번째 풀이 : 열심히 생각하면서 풀었으나 다음과 같은 상황에서 테스트를 통과하지 못했다.

 

  • ' '을(를) (space 4번) 입력받은 경우, ' '을(를) 리턴해야 합니다.
  • 'you can DO it!'을(를) 입력받은 경우, 'You Can DO It!'을(를) 리턴해야 합니다 
  • ' nEVER gIVE uP '을(를) 입력받은 경우, ' NEVER GIVE UP '을(를) 리턴해야 합니다 (gIVE up 사이의 빈 칸은 space 2번 입니다.) 
  • 'you have a idea'을(를) 입력받은 경우, 'You Have A Idea'을(를) 리턴해야 합니다
  • 'what a wonderful life'을(를) 입력받은 경우, 'What A Wonderful Life'을(를) 리턴해야 합니다

 

function letterCapitalize(str) {

    //빈 문자열이면 빈문자열 반환
    if (str.length === 0) {
      return "";
    }
    // 모든 문자를 공백으로 구분
    blank_str = str.split(" ");
    //결과값을 빈 문자열로 선언
    let result = "";
    //console.log("blank", blank_str);
    for (let i = 0; i < blank_str.length; i++) {
      let first = blank_str[i].charAt(0);
      let other = blank_str[i].slice(1);
      let newWord = first.toUpperCase() + other;
      result = result + newWord;
    }

    return result;
}

 

나의 두번째 풀이 

이후 한번에 내가 원하는 방식으로 해줄 메소드나 방법은 없을까 하다가  정규표현식을 이용한
방법을 찾아서 적용했을 때 바로 해결됐다. 저 긴 줄이 다섯 줄 정도로 해결된다.

 

function letterCapitalize(str){
    
  if (str.length === 0) {
    return "";
  }
  let newWord = str.replace(/\b[a-z]/g, (char) => char.toUpperCase());
  return newWord;
}

 

관련글 더보기