티스토리 뷰

문제 설명

문자열 s는 한 개 이상의 단어로 구성되어 있습니다. 각 단어는 하나 이상의 공백문자로 구분되어 있습니다. 각 단어의 짝수번째 알파벳은 대문자로, 홀수번째 알파벳은 소문자로 바꾼 문자열을 리턴하는 함수, solution을 완성하세요.

제한 사항

  • 문자열 전체의 짝/홀수 인덱스가 아니라, 단어(공백을 기준)별로 짝/홀수 인덱스를 판단해야합니다.
  • 첫 번째 글자는 0번째 인덱스로 보아 짝수번째 알파벳으로 처리해야 합니다.

입출력 예

s return
"try hello world" "TrY HeLlO WoRlD"

입출력 예 설명

try hello world는 세 단어 try, hello, world로 구성되어 있습니다. 각 단어의 짝수번째 문자를 대문자로, 홀수번째 문자를 소문자로 바꾸면 TrY, HeLlO, WoRlD입니다. 따라서 TrY HeLlO WoRlD 를 리턴합니다.

접근

주어진 문자열을 공백을 기준으로 배열로 만든다.

배열의 각 원소, 즉 각 단어마다 반복문을 수행하면서 대소문자화 한다.

구현

const solution = s => {
    let answer = '';

    // 공백을 기준으로 나누어 배열로 만든다.
    let arr = s.split(" ");

    for (let i = 0; i < arr.length; i++) {
        // 새로운 단어가 담길 변수
        let newWord = "";
        // 글자 위치에 따라 대소문자화
        for (let j = 0; j < arr[i].length; j++) {
            newWord = j % 2 === 0 
                ? newWord + arr[i][j].toUpperCase()
                : newWord + arr[i][j].toLowerCase();
        }
        // 단어 교체
        arr[i] = newWord;
    }
    // 각 원소 사이에 공백을 넣고 문자열로 변환
    answer = arr.join(" ");

    return answer;
};

참고: https://www.freecodecamp.org/forum/t/help-typeerror-cannot-assign-to-read-only-property-of-0-in-string/130271

글자만 바꾸려고 했더니 자꾸 에러가 발생했다.

글자가 아니라 단어 자체를 조작해야 했다.

다른 사람의 풀이

map() 메소드를 사용해서 푼 풀이를 보고 나름대로 작성해보았다.

언젠가 이렇게 함수형 풀이가 먼저 떠올랐으면 좋겠다.

const solution = s => {
    return s.split(" ").map(word => {
        return word.split("").map((letter, idx) => {
            return idx % 2 === 0 
                ? letter.toUpperCase() 
                : letter.toLowerCase();
        }).join("");
    }).join(" ");
};
반응형
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2025/06   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
글 보관함