본문 바로가기
알고리즘 스터디/프로그래머스 스킬체크 레벨 1(끝)

[프로그래머스 스킬체크 레벨 1] 이상한 문자 만들기 풀이 및 설명 - 자바스크립트[JavaScript]

by 레일라오리덕 2021. 7. 14.
728x90

https://programmers.co.kr/learn/courses/30/lessons/12930?language=javascript 

 

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

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

programmers.co.kr

 

문제

 

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

 

 

제한 사항

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

결괏값 예시

 

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

 

기본 제공 틀

 

function solution(s) {
    var answer = '';
    return answer;
}

 

풀이 [JavaScript]

 

728x90

짝수 = 대문자, 홀수 = 소문자 (짝, 홀수는 인덱스 기준)

우선 들어온 s값을 공백(' ')을 기준으로 split했다.(['try', 'hello', 'world'])

그리고 이 각각의 try, hello, world의 값을 돌게 되는데, try(splited[0]번째 값)을 예시로 들어보자면, try의 0번째 인덱스는 인덱스 기준으로 짝수이므로, 짝수인 경우, 대문자로 바꾸어서  try배열에 바꿔 넣어주고, 홀수면 소문자로 바꾸어서 다시 넣어주는 방식으로 로직을 구현했다.

이렇게 try를 끝내고 나면 배열에 공백을 넣어주어 ['TrY', ' ', 'HeLlO', ' ','WoRlD',' ']가 되고, 마지막의 공백은 필요없으므로, pop함수를 이용해서 제거해준다. ['TrY', ' ', 'HeLlO', ' ','WoRlD']

그 후, join함수를 사용해서 Try HeLlo WoRlD로 더해주어서 리턴해주면 된다.

function solution(s) {
    var splited =  s.split(' ');
    var tmp = [];
    var answer ='';
    for(var i in splited){
        for(var j in splited[i]){
            if(j%2 ===0 ){
                tmp.push(splited[i][j].toUpperCase());
            }else{
                tmp.push(splited[i][j].toLowerCase());
            }
        }
        tmp.push(' ');        
    }
    tmp.pop();
    answer = tmp.join('');
    return answer;
}

아래는 위의 방식과는 다르게 배열이 아닌 문자열에 문자를 추가하는 방식으로 구현해보았다.

['try', 'hello', 'world'] 에서 인덱스에 맞게 값만 바꾸어 tmp에 'TrY' 를 만들어주고 splited[0]에 넣어주었다.

그렇게 하면 splited = ['TrY', 'HeLlO', 'WoRlD']가 되고, 이 값들을 join함수를 이용해서 다 합해주면 원하는 결과값이 나오게 된다.

 

위의 방법에서는 각자의 문자열을 대/소문자로 바꾸어준뒤, 다시 배열에 각각의 위치에 맞게 넣어주었지만, 이 방식은, 각 배열의 i번째의 단어를 한번에 string인 tmp에 넣어준 후, i번째 배열에 단어 자체를 다시 넣어주는 방식으로 훨씬 깔끔하다.

이 방식을 사용하면 굳이 필요없는 공백을 생성하지 않고도 join함수를 사용하여 원하는 값을 만들어낼 수 있다.

 

function solution(s) {
    var splited =  s.split(' ');
    for (var i in splited) {
        var tmp = '';
        for (var j in splited[i]) {
            if(j % 2 === 0){
                tmp += splited[i][j].toUpperCase();
            } else {
                tmp += splited[i][j].toLowerCase();
            }
        }
        splited[i] = tmp;
    }
    return splited.join(' ');
}

채점 결과 [JavaScript]

 

 

728x90

댓글