programmers/level1

[level1] 이상한 문자 만들기

태기의삶 2020. 7. 4. 01:32

 

 

 

코딩테스트 연습 - 이상한 문자 만들기

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

programmers.co.kr

문제 설명 :

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

입력 : "try hello world"

출력 : "TrY HeLlO WoRlD"

 

접근 방법 :

function solution(s) {
    const strArr = s.split();
    let Arr = [];
    strArr.forEach(str => {
        let answer = '';
        for(let i in str){
            if(i === 0 || i % 2 === 0){
                answer += str[i].toUpperCase();
            }else{
                answer += str[i];
        }
    }
        Arr.push(answer)
    });
    return Arr.join().replace(/,/gi, " ");
}

내 첫 코드는 이랬다..

출력 값은 맞았지만, 채점을 했을 때 틀렸다고 해서 질문하기의 글들을 보고 그때 알았다.

그것은 바로, 공백 체크와 대소문자를 바꾸는 함수를 무조건 넣어야 한다는 것을 말이다.. 😥

그래서 오랜 고민 끝에 코드를 수정해보았다.

 

수정한 코드 :

function solution(s) {
    let answer = "";
    s.split(" ").forEach(ch => {
        for(let i in ch){
            answer += i % 2 === 0 ? ch[i].toUpperCase() : ch[i].toLowerCase();
        }
        answer += " "
    });
    return answer.slice(0, -1);
}

우선 s에는 "try hello world" 입력값이 들어온다.

여기서 공백 체크를 해야 하는데, 나는 split(" ")을 이용해 각각의 공백을 처리했다.

그러면  ["try", "hello", "world"] 이런 식으로 새 배열이 반환될 것이다.

반환된 배열들을 forEach() 구문을 통해 항목들을 하나씩 꺼내서 그 항목(문자열)을 가지고 for in문을 통해서 각각의 문자를 추출하고 삼항 연산자를 써서 짝수이면 대문자로 반환하고, 아니면 소문자를 반환한다.

반환되면, "TrY HeLlO WoRlD " 이렇게 값이 나올 것이다.

그런데 맨 마지막에 공백 문자가 들어가 있는 것을 볼 수 있다. 이 공백 문자를 제거해야만 문제를 통과할 수 있다.

마지막으로 return 값에 slice(0, -1)로 설정해서 첫 글자부터 마지막 이전의 글자까지만 반환하도록 해준다.

그러면 원하는 값 "TrY HeLlO WoRlD"이 출력될 것이다.