:ledger: 문제 설명

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

:one: 제한사항

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

:two: 입출력 예

s return
“try hello world” “TrY HeLlO WoRlD”

:three: 입출력 예 설명

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

:ledger: 문제 풀이

const solution = (s) => {
  return s
    .split(" ") // 공백을 기준으로 단어를 나눠줌
    .map((word) =>
      word
        .split("") // 단어를 문자 배열로 나눔
        .map((t, idx) => (idx % 2 === 0 ? t.toUpperCase() : t.toLowerCase()))
        .join("")
    )
    .join(" "); // 단어를 다시 공백으로 연결합니다.
};

console.log(solution("try hello world"));

:computer: 풀이

  1. 먼저 매개변수로 전달받은 문자열을 공백 기준으로 나눠주기 위해 split(' ')을 사용한다.
  2. map메서드를 사용하여, try, hello, world 각 단어를 문자 배열로 나눈다.
  3. 이후에 map 메서드를 사용하여, 짝수의 경우 대문자로 변경해주고 홀수일 경우 소문자로 변경해준다.
  4. join을 사용하여 다시 단어를 공백으로 연결한다.

:fire: 다른 사람의 풀이 참고

/(\w)(\w)/g = 두 개의 연속된 문자(단어 문자)

function toWeirdCase(s) {
  //함수를 완성해주세요
  return s.toUpperCase().replace(/(\w)(\w)/g, function (a) {
    return a[0].toUpperCase() + a[1].toLowerCase();
  });
}

출처: 프로그래머스 코딩 테스트 연습, https://school.programmers.co.kr/learn/challenges