728x90
반응형
JadenCase 문자열 만들기
❓ 문제설명
JadenCase란 모든 단어의 첫 문자가 대문자이고, 그 외의 알파벳은 소문자인 문자열입니다. 단, 첫 문자가 알파벳이 아닐 때에는 이어지는 알파벳은 소문자로 쓰면 됩니다. (첫 번째 입출력 예 참고) 문자열 s가 주어졌을 때, s를 JadenCase로 바꾼 문자열을 리턴하는 함수, solution을 완성해주세요.
🚫 제한조건
s는 길이 1 이상 200 이하인 문자열입니다.
s는 알파벳과 숫자, 공백문자(" ")로 이루어져 있습니다.
숫자는 단어의 첫 문자로만 나옵니다.
숫자로만 이루어진 단어는 없습니다.
공백문자가 연속해서 나올 수 있습니다.
✔ 입출력 예
s | return |
"3people unFollowed me" | "3people Unfollowed Me" |
"for the last week" | "For The Last Week" |
💡 풀이
function solution(s) {
//내 풀이
// 문자열을 모두 소문자로 먼저 변경한 후
// 각 단어의 첫문자가 알파벳일 경우만 대문자로 변경
const lower_s = s.toLowerCase()
return lower_s.split(' ').map(word =>
word.replace(/^[a-z]/, word.charAt(0).toUpperCase())
).join(' ')
// 다른사람 풀이
// 해당 문자가 숫자일 경우 UpperCase를 하여도 그대로이기 때문에
// 각 단어의 첫문자를 UpperCase로 변경하고 그 이후의 문자는 모두 LowerCase 처리
return s.split(' ').map(word =>
word.charAt(0).toUpperCase() + word.substring(1).toLowerCase()
).join(' ')
}
📝 해설
문자열 s를 먼저 toLowerCase() 처리를 한 후 공백을 기준으로 단어별 배열을 돌면서 첫번째 문자가 알파벳일 경우(/^[a-z]/ ) 대문자로 변경해서 공백으로 다시 합친 문자열을 리턴 하였다. 이 후 다른사람 풀이를 보니 toUpperCase() 와 toLowerCase() 매서드가 숫자 문자에서 사용될 경우 그대로이기 때문에 그냥 모든 단어의 첫번째 문자는 toUpperCase() 처리하고 그 이후 문자는 toLowerCase() 처리를 하여 리턴하여도 된다는 것을 알게 되었다.
두 방식이 메모리나 속도에서 큰 차이는 없었는데 내 풀이가 조금이라도 속도가 느린것으로 보이는데 이는 replace 함수의 복잡도 O(n) 이 더 걸려서 그런게 아닐까 생각한다.
📚 참고자료
- https://kimby.tistory.com/84 (String 메소드)
- 추후 추가 예정(정규표현식)
728x90
반응형