본문 바로가기
코딩 문제/프로그래머스 [ JavaScript ]

[ 프로그래머스 / JavaScript ] JadenCase 문자열 만들기

by CODESIGN 2022. 9. 21.

https://school.programmers.co.kr/learn/courses/30/lessons/12951#

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

문제 설명


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"

 

 

나의 풀이


처음에 쉽게 풀었는데 테스트 케이스 하나가 통과가 안되었다.

알고 보니 이문에의 제한 조건을 잘 확인해야 한다.

 

제한 조건에서 "s는 알파벳과 숫자, 공백 문자(" ")로 이루어져 있습니다."라는 문구가 있다.

예제에서는 공백이 하나씩밖에 없지만 테스트 케이스에서는 아래의 경우가 있다.

 

"hello(공백)(공백)(공백) hello(공백)(공백) hello" 이렇게 되어 있으면

"Hello(공백)(공백)(공백) Hello(공백)(공백) Hello"처럼 return 해야 된다.

 

문자열에서 공백을 지우면 안 된다.

 

function solution(s) {
    var answer = '';
    var words = s.toLowerCase().split(""); // s를 모두 소문자로 변환시켜준다.
    words[0] = words[0].toUpperCase(); //문장의 첫글자를 대문자로 변경시켜준다.
    for (let i = 0; i < words.length; i++) { // words의 배열에서
        var temp = i+1; 
        // 현재 배열이 " "일때 그리고 다음 배열이 존재한다면
        if (words[i] == " " && temp < words.length) { 
            words[temp] = words[temp].toUpperCase(); // 대분자로 변환시켜준다.
        }
    }
    return words.join(""); //배열을 join()해준뒤 string으로 출력한다.
}

 

 

 

다른 풀이


코드가 훨씬 간결하고 효율 적이다.

 

s를 split(" ")하여 배열로 바꿔준 뒤,

각 단어의 첫 번째 letter(charAt(0))을 써서 대문자로 변경해준 뒤

두 번째 글자부터(subString(1)) 단어가 끝날 때까지 소문자로 변경시키고 join(" ")을 해주었다.

 

여기서는 공백이 여러 개일 경우를 대비해 split()을 공백으로 하고 공백으로 join()해주는 방법을 섰다.

 

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

 

 

 

댓글