Coding test

[프로그래머스] JadenCase 문자열 만들기 (Lv 2) - javascript

Jiwoo 2022. 5. 21. 18:54

문제

JadenCase란 모든 단어의 첫 문자가 대문자이고, 그 외의 알파벳은 소문자인 문자열입니다. 단, 첫 문자가 알파벳이 아닐 때에는 이어지는 알파벳은 소문자로 쓰면 됩니다. (첫 번째 입출력 예 참고)
문자열 s가 주어졌을 때, s를 JadenCase로 바꾼 문자열을 리턴하는 함수, solution을 완성해주세요.
 

  • 제한 조건
    • s는 길이 1 이상 200 이하인 문자열입니다.
    • s는 알파벳과 숫자, 공백문자(" ")로 이루어져 있습니다.
      • 숫자는 단어의 첫 문자로만 나옵니다.
      • 숫자로만 이루어진 단어는 없습니다.
      • 공백문자가 연속해서 나올 수 있습니다.
         

나의 풀이

function solution(s) {

    s = s.split(" ");

    for (let i = 0; i < s.length; i++ ) {

        if(s[i] === '') continue; // *

        else if(/[A-Z]/i.test(s[i][0])) {

            s[i] = s[i][0].toUpperCase() + s[i].slice(1).toLowerCase();            
        }
        else {
            s[i] = s[i].toLowerCase();
        }
    }
    return s.join(" ");
}

 
공백이 연달아 있을 경우에 통과하지 못해서, 예외 조건을 설정했다.
 
'i love'.split(' ') => ['i', '', 'love']
문자열을 공백을 기준으로 배열로 나누면, 공백이 연달아 있는 부분은 '' 빈 문자열이 된다는 것 참고하자!
 

  • 정확도 테스트 결과

 

모범 해답

function solution(s) {
    return s.split(" ").map(v => v.charAt(0).toUpperCase() + v.slice(1).toLowerCase()).join(" ");
}

 

위 코드에서 공백 처리를 따로 안했을 때, 에러가 나는 이유는
문자열의 첫번째 글자를 s[0]같이 인덱스로 호출했기 때문이다.
비어있는데 인덱스로 호출하면 undefined가 출력되어 메서드를 적용시 에러가 난다.
에러없이 처리하려면 s.charAt(0)으로 호출했어야 한다.
 
그러면 따로 예외처리를 해주지 않아도 되고, 코드가 훨씬 줄어든다.
또한 숫자에 str.toUpperCase()를 하면 그대로 숫자가 반환되기 때문에 굳이 따로 처리해주지 않아도 된다.
 

  • 문자열의 n번째 글자 불러오기

    let str = '';
    
    alert(str[0]); // undefined
    alert(str.charAt(0)); // ''

    에러를 방지하기 위해서는 str.charAt(0)를 사용하는 것이 좋다

 

  • 숫자에 toUpperCase() 처리하면?

    (3).toUpperCase() => 3

    그대로 숫자가 출력된다. 이는 toLowerCase()도 마찬가지.
     

정확도 테스트 결과