[Algorithm] JadenCase 문자열 만들기

미누·2023년 3월 27일
0

Algorithm

목록 보기
5/8
post-thumbnail

JadenCase 문자열 만들기

첫 시도

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(' ');
}

BUT,

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(' ');
} 
profile
Dev Notes, with bit of JS?

0개의 댓글