[프로그래머스] Lv.2 JadenCase 문자열 만들기

ZZEON·2024년 1월 2일
0

문제 설명

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

제한 조건

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

문제 풀이

원래 처음에는 for문으로 풀려고 했으나.. 너무 복잡하고 런타임 에러까지 났다.. 일단 코드는 올려보겠다.

function solution(s) {
    var answer = '';
    answer = s.toLowerCase()
    answer = answer.split(' ')
    var result = ''; 
    for(let i= 0; i < answer.length; i++){
        let word = answer[i];
        let fristString = word[0].toUpperCase(0)
        let lastString = word.slice(1).toLowerCase();
        let JadenCase = fristString + lastString;
        result += JadenCase + ' ';
    }
    return result.trim();
}

결국 다른 방도를 찾아봐야 했고, 제일 간단하게 나온 해답이 밑에 있는 코드이다.

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

map 함수를 사용하면 for문을 돌린 것과 같은 결과를 낳는다.

map() 함수

간단하게 map() 함수에 대해 리마인드 해보겠다.

map()은 배열을 순회하며 지정된 콜백 함수를 적용하여 각 요소를 변환하고, 그 변환된 값을 모아서 새로운 배열로 반환하는 역할을 수행한다.

Array.map(function(array){ }); 혹은 함수를 작성하는 대신 Array.map(x => x.~~); 이렇게 사용도 가능하다.
두 번째에서 x는 배열의 값을 말한다.

예를 들어 array=[1, 2, 3, 4, 5]가 있으면 x는 0번째부터 도는 배열이기 때문에 순서대로 1, 2, 3, 4, 5의 값을 가지게 된다. 그래서 array.map(x => x*2) 로 사용한다면 각각의 값에 2를 곱한 값이 저장되게 된다.
이 처럼 for문을 돌 필요 없이 간단하게 나타낼 수 있기 때문에 자주 사용된다.

profile
프론트엔드 개발과 디자인을 좋아합니다

0개의 댓글