ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 항해 99 - 이상한 문자 만들기
    알고리즘 공부/JavaScript 문제 2023. 4. 17. 22:40

    [ 문제 ]

    문자열 s는 한 개 이상의 단어로 구성되어 있습니다. 

    각 단어는 하나 이상의 공백문자로 구분되어 있습니다. 

    각 단어의 짝수번째 알파벳은 대문자로, 홀수번째 알파벳은 소문자로 바꾼 문자열을 리턴하는 함수, solution을 완성하세요.

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

     

    [ Input / Output 예시 ]

    Input Output
    "try hello world" "TrY HeLlO WoRlD"

     


    [ 풀이 ]

    보자마자 내가 생각 났던 방법 그대로 표현하자면

    "try hello world"

    split(" ")

    ["try", "hello", "world"]

    split("")

    ["t", "r", "y"] , ...

    map(인덱스 위치에 따라 대소문자 변경)

    ["T", "r", "Y"], ....

    join("")

    ["TrY", "HeLlO", "WoRlD"]

    join(" ")

    "TrY HeLlO WoRlD"

     

    너무 감사하게도 join 메소드가 똑같이 있었기 때문에 가능했던 풀이이다.

     

     

    [ 코드 ]

    // 공백을 기준으로 판단해야 하므로 split을 통해 공백을 기준으로 자른다.
    // 단어를 문자로 쪼개서 인덱스의 위치에 따라서 대문자 소문자로 변경해준다.
    // 단어를 문자로 쪼갰기 때문에 join으로 한 단어로 만들어주고 문자는 또 다시 하나의 문장으로 모아준다. 
    const solution1 = function (s) {
        // 문장을 공백을 기준으로 쪼개기
        const sSplit = s.split(' ');
        const result = [];
    
        // 각 단어로 for문 돌리기
        for (let i=0 ; i<sSplit.length ; i ++){
                        // 단어를 문자로 쪼개서 대문자, 소문자 변경                                          // 쪼개진 문자를 다시 단어로
            result.push(sSplit[i].split('').map((str, j) => (j%2===0) ? str.toUpperCase() : str.toLowerCase()).join(''))
            // result 배열에 한 단어씩 push
        }
        // result를 한 칸의 공백을 기준으로 한 문장으로 모아준다.
        return result.join(' ');
    }
    
    console.log(solution1("try hello world"))

    댓글

Designed by Tistory.