첫 시도
function solution(s) {
answer = []
s = s.toLowerCase().trim().replace(/ +/g, " ").split(' ');
for(let i=0; i<s.length; i++){
answer.push(s[i].replace(/^[a-z]/, s[i][0].toUpperCase()))
}
return answer.join(' ');
}
두 번째 시도
런타임 에러가 난 이유는 지문 내 '여러 개의 공백이 들어갈 수 있다' 라는 조건 때문이었다.
split(' ')은 하나의 공백만 없애주기 때문에 공백이 ' ' 두개였다면 -> ' ' 하나의 공백으로 줄어들게 되는 것!
이를 수정하기 위해 trim() 으로 앞 뒤 공백을 삭제, replace(/ +/g, " ") 로 전역에 걸친 x개의 공백 모두를 "" 으로 바꾸었다 !
function solution(s) {
answer = []
s = s.toLowerCase().trim().replace(/ +/g, " ").split(' ');
for(let i=0; i<s.length; i++){
answer.push(s[i].replace(/^[a-z]/, s[i][0].toUpperCase()))
}
return answer.join(' ');
}
still returns same shit ㅋㅋ..
문제 조건부터 다시금 살펴보자!
세 번째 시도
function solution(s) {
// 조건 1. 모든 단어의 첫 문자를 대문자로
// 조건 2. 첫 문자가 숫자일 경우 변경없이 그대로 사용
// 조건 3. 숫자가 나온다면 단어의 첫 문자로만 등장
// 조건 4. 숫자로만 이루어진 단어는 존재 X
// 조건 5. 공백문자 연속 등장 가능
// 조건 6. s는 길이 1 이상 200 이하의 문자열
answer = []
s = s.toLowerCase().trim().replace(/ +/g, " ").split(' ').map(x=> x.replace(/^[a-z]/, x[0].toUpperCase()));
return s.join(' ');
}
oh, same shit, different code
아예 다른 접근 방식을 사용해야 할 듯 하다.
다른 분의 아이디어 참고
와.. 정말 기똥차다.
substr() 메소드를 이용하여 문제에서 요구하는 부분만 떼어내어 변환, 덧셈을 해준다!function solution(s) { const words = s.split(' ') .map(word => word.substr(0, 1).toUpperCase() + word.substr(1).toLowerCase()); return words.join(' '); }