본문 바로가기
코딩테스트/프로그래머스

[프로그래머스] 이상한 문자 만들기 - 자바스크립트

by 핸디(Handy) 2021. 3. 12.

문제 설명

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

제한 사항

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

입출력 예

sreturn

"try hello world" "TrY HeLlO WoRlD"

입출력 예 설명

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


<아이디어>

index를 하나 두고 공백이 나올때마다 0으로 초기화 -> 단어의 홀/짝 구별용
그리고 하나씩 읽어가면서 변환하여 answer에 저장

<내 코드>

function solution(s) {
    let answer = '';
    let index = 0;
    for(let i =0; i < s.length; i++){
        if(s[i] ===" ") {
            index = 0;
            answer += " ";
        }
        else {
            if(index%2 === 0) {
                //짝
                answer += s[i].toUpperCase();
            }else{
                //홀
                answer += s[i].toLowerCase();
            }
            index++;
        }
    }
    return answer;
}


<다른 분 코드>

// #1
function toWeirdCase(s){
  return s.toUpperCase().replace(/(\w)(\w)/g, function(a){return a[0].toUpperCase()+a[1].toLowerCase();})

}
// #2
function toWeirdCase(s){
  var result = "";

  for(var word of s.split(" ")) {
    for(var i in word) {
      result += word[i][parseInt(i) % 2 == 0 ? "toUpperCase" : "toLowerCase"]();
    }
    result += " ";
  };

  return result.slice(0, -1);
}

#1 코드는 정규화를 이용한 코드. 맨처음 아이디어로 생각나긴 했지만 이게 더 구현이 빠를듯하여 안씀.

#2 코드는 함수 호출이 특이하여 가져옴. 실무에서도 해당하는 함수호출을 써본 적이 있어서 이해는 가는데,, 왜 문제 풀땐 생각이 안날까 하는 안타까움..

댓글