문제
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()
도 마찬가지.
정확도 테스트 결과
'Coding test' 카테고리의 다른 글
[프로그래머스] 모음사전 (Lv 2) - javascript / dfs (0) | 2022.05.24 |
---|---|
[프로그래머스] n개의 최소공배수 (Lv 2) - javascript (0) | 2022.05.23 |
[프로그래머스] 행렬의 곱셈 (Lv 2) - javascript (0) | 2022.05.20 |
[프로그래머스] 최솟값 만들기 (Lv 2) - javascript (0) | 2022.05.19 |
[프로그래머스] 최댓값과 최솟값 (Lv 2) - javascript (0) | 2022.05.19 |