Practice for coding test

프로그래머스 - Level 2. JadenCase 문자열 만들기 / JavaScript (js)

Gray Park 2023. 2. 16. 11:30
728x90
반응형

 

문제설명

문제분석

이 문제는 각 문자를 탐색하면서 조건에 부합하는지 확인하는 문제입니다. 여러 형태로 접근할 수 있겠지만, 저는 한 단어의 구분을 공백으로 보기로 했습니다.

  • 각 문자를 탐색한다.
  • 문자가 공백이 아닌 경우, strArr에 현재의 문자를 추가한다.
  • 문자가 공백인 경우, strArr.join("") + 공백을 answer에 추가한다.
    • 이때 strArr.length가 0이면 toUpperCase를 한다.
    • 이때 strArr.length가 0이 아니면 toLowerCase를 한다.
  • 반복문이 끝난 후에도 strArr에 담겨있는 단어가 있다면 answer에 추가한다.

요약했으니, 코드를 짜보겠습니다.

이해하기 쉽게 코드작성하기

function solution(s) {
    let answer = "";
    const strArr = [];
    
    for(const ch of s) {
        if(ch === " ") {
            answer += strArr.join("") + " ";
            strArr.length = 0;
            continue;
        }
        if(strArr.length === 0) {
            strArr.push(ch.toUpperCase());
        } else if (strArr.length > 0) {
            strArr.push(ch.toLowerCase());
        }
    }
    
    if(strArr.length > 0) {
        answer += strArr.join("");
    }
    
    return answer;
}

코드 설명

분석한 대로 작성한 코드라 부가 설명은 없습니다. 위 코드와 같은 로직을 메소드를 이용해 깔끔하게 나타내면 다음과 같습니다.

function solution(s) {
    const [first, remain] = [s[0].toUpperCase(), s.slice(1)];
    return remain
        .split("")
        .reduce((a,c) => {
            if(c === " ") {
                a += c;
            } else if(a[a.length - 1] === " ") {
                a += c.toUpperCase();
            } else {
                a += c.toLowerCase();
            }
            return a;
        }, first);
}
728x90
반응형