JadenCase 문자열 만들기
문제 설명
JadenCase란 모든 단어의 첫 문자가 대문자이고, 그 외의 알파벳은 소문자인 문자열입니다. 단, 첫 문자가 알파벳이 아닐 때에는 이어지는 알파벳은 소문자로 쓰면 됩니다. (첫 번째 입출력 예 참고)
문자열 s가 주어졌을 때, s를 JadenCase로 바꾼 문자열을 리턴하는 함수, solution을 완성해 주세요.
입출력 예
s | return |
"3people unFollowed me" | "3people Unfollowed Me" |
"for the last week" | "For The Last Week" |
나의 풀이
function solution(s) {
let arr = s.split(" ");
for (let i = 0; i < arr.length; i++) {
let arr2 = arr[i].split("");
for (let j = 0; j < arr2.length; j++) {
const regex = /[1234567890]/;
if (regex.test(arr[i][j])) continue;
if (j === 0) {
arr2[j] = arr2[j].toUpperCase();
continue;
};
if (j !== 0) arr2[j] = arr2[j].toLowerCase();
}
arr[i] = arr2.join("");
}
return arr.join(" ");
}
- s를 `split()` 메서드를 이용해 문자열을 요소로 가지는 배열로 쪼갠 후에, 다시 한번 문자 하나하나를 요소로 가지는 배열로 만든다.
- 정규표현식을 이용해 문자가 숫자로 이루어져 있을 경우에는 `continue`한다.
- 문자가 해당 문자열의 첫 글자인 경우(index가 0일 때)와 아닌 경우로 나눠서 각각 `toUpperCase()`와 `toLowerCase()`를 적용한다.
- 최종적으로 가공한 문자열이 담긴 배열을 `join()` 메서드를 이용해 합친 후 반환한다.
다른 사람의 풀이
function solution(s) {
return s.split(" ").map(v => v.charAt(0).toUpperCase() + v.substring(1).toLowerCase()).join(" ");
}
필요한 메서드를 적절하게 사용한 간단한 풀이를 보니 내가 비효율적인 방식으로 접근했다는 생각이 든다. 하지만 이러면서 배워나가는 거겠지! 특히 `charAt()` 메서드는 오늘 처음 봤기 때문에 기억해 둬야겠다.
문자열을 첫 글자와 나머지로 쪼개서 각각 `toUpperCase()`와 `toLowerCase()`를 적용한 후에 다시 합친다. 내 풀이도 생각해 보면 굳이 이중 for문을 쓰지 않고 for문 한 번으로도 풀 수 있었을 텐데, 첫 접근이 문자열을 문자 하나하나 쪼개서 배열로 만든 후에 푸는 것이었기 때문에 다른 방법을 생각하지 못했던 거 같아 아쉽다.
String.prototype.charAt()
const sentence = 'The quick brown fox jumps over the lazy dog.';
const index = 4;
console.log(`The character at index ${index} is ${sentence.charAt(index)}`);
// Expected output: "The character at index 4 is q"
- charAt() 함수는 문자열에서 특정 인덱스에 위치하는 유니코드 단일문자를 반환합니다.
- 출처 https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/String/charAt
String.prototype.substring()
str.substring(indexStart[, indexEnd])
const str = 'Mozilla';
console.log(str.substring(1, 3));
// Expected output: "oz"
console.log(str.substring(2));
// Expected output: "zilla"
- substring() 메소드는 string 객체의 시작 인덱스로부터 종료 인덱스 전까지문자열의 부분 문자열을 반환합니다.
- indexStart: 반환문자열의 시작 인덱스
- indexEnd: 반환문자열의 마지막 인덱스로 부분 문자열에 포함되지 않음 (optional)
- 출처 https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/String/substring