본문 바로가기
TIL/Programmers

[TIL] 2023.08.27 Programmers_JadenCase 문자열 만들기

by heereal 2023. 8. 27.

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(" ");
}
  1. s를 `split()` 메서드를 이용해 문자열을 요소로 가지는 배열로 쪼갠 후에, 다시 한번 문자 하나하나를 요소로 가지는 배열로 만든다.
  2. 정규표현식을 이용해 문자가 숫자로 이루어져 있을 경우에는 `continue`한다.
  3. 문자가 해당 문자열의 첫 글자인 경우(index가 0일 때)와 아닌 경우로 나눠서 각각 `toUpperCase()`와 `toLowerCase()`를 적용한다.
  4. 최종적으로 가공한 문자열이 담긴 배열을 `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"

 

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"

 

 

 

댓글