JadenCase 문자열 만들기(Javascript)

·2022년 10월 17일
0
post-thumbnail

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

제한 조건

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

입출력 예

sreturn
"3people unFollowed me""3people Unfollowed Me"
"for the last week""For The Last Week"

나의 풀이

function solution(s) {
    function match(v){
        return v[0].toUpperCase() + v.toLowerCase().substring(1)
    }
    return s.replace(/[\w]+/g, match)
}

처음에는 split()으로 나누어서 풀었는데, 런타임 에러가 발생해서 replace와 함수를 사용해서 풀었다. 단어의 첫 번째 부분을 대문자로 바꾸고 뒤의 문자를 소문자로 바꿔주는 함수를 만든 뒤, 정규식으로 띄어쓰기 된 문자를 찾아 함수에 넣어 주었다.

참고할 풀이


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

내가 아래에 풀었던 풀이랑 유사한데, [0] 대신 charAt(0)을 사용해 주었다는 게 다르다. 아마 공백이 연속으로 있는 문자열 때문인 것 같은데, 문자열이 공백이라면 charAt(0)은 공백을, [0]은 undefined를 반환한다. undefined에 toUpperCase()를 사용하면 런타임 오류가 발생하므로 인덱스를 이용하는 대신 charAt()을 사용해 줘야 한다.

틀린 풀이

function solution(s) {
    return s.toLowerCase()
            .split(' ')
            .map(v => v[0].toUpperCase() + v.substring(1))
            .join(' ')
}
profile
전 이것도 몰라요

0개의 댓글