프로그래머스

[JavaScript] 이상한 문자 만들기 - 프로그래머스

jjangsh 2024. 8. 19. 15:11

문제 :

 

내 풀이 :

 

첫 번째 오답 : 

function solution(s) {
    let firstWordUpperCase = "";
    let secondWordUpperCase = "";
    let thirdWordUpperCase = "";
    
    const [firstWord, secondWord, thirdWord] = s.split(" ");
    
    for(let i = 0; i< firstWord.length; i++) {
        if(i % 2 === 0) {
            firstWordUpperCase += firstWord[i].toUpperCase();
        } else {
            firstWordUpperCase += firstWord[i];
        }
    }
    
    for(let i = 0; i< secondWord.length; i++) {
        if(i % 2 === 0) {
            secondWordUpperCase += secondWord[i].toUpperCase();
        } else {
            secondWordUpperCase += secondWord[i];
        }
    }
    
    for(let i = 0; i< thirdWord.length; i++) {
        if(i % 2 === 0) {
            thirdWordUpperCase += thirdWord[i].toUpperCase();
        } else {
            thirdWordUpperCase += thirdWord[i];
        }
    }
    
    return ${firstWordUpperCase} ${secondWordUpperCase} ${thirdWordUpperCase};
}

 

 

두 번째 오답 :

function solution(s) {
    function transformUpperCase(word) {
        return [...word].map((char, i) =>
            i % 2 === 0 ? char.toUpperCase() : char
        ).join('');
    }

    const [firstWord, secondWord, thirdWord] = s.split(" ");
    
    const firstWordUpperCase = transformUpperCase(firstWord);
    const secondWordUpperCase = transformUpperCase(secondWord);
    const thirdWordUpperCase = transformUpperCase(thirdWord);
    
    return `${firstWordUpperCase} ${secondWordUpperCase} ${thirdWordUpperCase}`;
}

 

 

 

통과 한 정답 :

function solution(s) {
    let result = [];
    
    const splitS = s.split(" ")
    
    for ( let i = 0; i < splitS.length; i++) {
        let alternateUpperCase = '';
    
        for(let j = 0; j < splitS[i].length; j++) {
            if (j % 2 === 0) {
                alternateUpperCase += splitS[i][j].toUpperCase()
            } else {
                alternateUpperCase += splitS[i][j].toLowerCase()
            }
        }
        result.push(alternateUpperCase)
    }
    return result.join(' ')
}

 

1. split() 메서드를 통해 주어진 문자열 s를 공백 기준으로 나누어 단어 배열로 만든다. 만약 s가 "hello world" 라면 [ "hello", "world" ]가 된다.

 

2. 첫 번째 for문에서 각 단어 ( splitS[ i ] )에 대해 반복한다. 1번에서의 예시와 같이 [ "hello", "world" ] 라면 splitS[ i ]는 "hello"이다.

 

3. 두 번째 for문에서 단어의 문자를 하나씩 처리한다. 위 예시처럼 splitS[i]는 "hello"일 때, j는 "hello"내의 특정 문자의 인덱스를 나타내고 예를 들면, splitS[0][1] 는 "hello"의 두 번째 문자이므로 "e"를 의미한다.

 

4. j % 2 === 0인 경우(짝수 인덱스), 문자를 대문자로 변환하고, 그렇지 않은 경우(홀수 인덱스) 소문자로 변환한다.

변환된 문자는 word에 추가된다.