문제 요구 사항
JadenCase란 모든 단어의 첫 문자가 대문자이고, 그 외의 알파벳은 소문자인 문자열입니다.
단, 첫 문자가 알파벳이 아닐 때에는 이어지는 알파벳은 소문자로 쓰면 됩니다. (첫 번째 입출력 예 참고)
문자열 s가 주어졌을 때, s를 JadenCase로 바꾼 문자열을 리턴하는 함수, solution을 완성해주세요.
요구사항 분석 및 접근방법
문자열 s 가 주어지면 split(' ')함수를 이용해서 단어별로 배열에 저장하고 첫 글자가 알파벳인지 아닌지 판별하여 알파벳이면 첫번째 문자만 대문자로 , 알파벳이 아니라면 그대로 소문자로 return하는 함수를 만드려고 했다.
첫번째 코드
function solution(s) {
var answer = '';
const a = s.split(' ');
let pattern2 = /[a-zA-Z]/; //영어
for (let i = 0; i < a.length; i++) {
if (!pattern2.test(a[i][0])) {
a[i] = a[i].toLowerCase();
} else {
// a[i][0] = a[i][0].toUpperCase();
// console.log(a[i][0]);
}
}
answer = a.join(' ');
return answer;
}
a 라는 배열에서 첫번째 문자만 대문자로 바꾸고 콘솔을 찍어보니 이상하게 대문자로 바뀌지 않는 오류가 발생했다.
그래서 두번째 방식으로 charAt() 과 slice() 를 이용해서 첫번째 문자와 나머지 문자를 따로 저장한 뒤 그 값을 더한 후 a[i]에 저장하는 방식을 사용했다.
function solution(s) {
var answer = '';
const a = s.split(' ');
let pattern2 = /[a-zA-Z]/; //영어
for (let i = 0; i < a.length; i++) {
if (!pattern2.test(a[i][0])) {
a[i] = a[i].toLowerCase();
} else {
let first = a[i].charAt(0);
let others = a[i].slice(1);
a[i] = first.toUpperCase() + others.toLowerCase();
}
}
answer = a.join(' ');
return answer;
}
이렇게 구현하니 성공했다. 마지막으로 문자열로 출력해야함으로 다시 배열을 join(' ') 함수를 이용해 단어별로 문자열을 만들어 출력했다.