문제 풀러 가기

이상한 문자 만들기 (Lv.1)


문제

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

제한 사항

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

입출력 예

sreturn
"try hello world""TrY HeLlO WoRlD"

입출력 예 설명

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


나의 풀이

function solution(phrase) {
  return phrase.split(' ').map(word => {
    let output = '';
    for (let i = 0; i < word.length; i++) {
      output += i % 2 ? word[i].toLowerCase() : word[i].toUpperCase()
    };
    return output;
  }).join(' ');
}

console.log(solution("try hello world"));
// Expected output: TrY HeLlO WoRlD
console.log(solution("this is just a trick"));
// Expected output: ThIs Is JuSt A TrIcK
  • 문자열을 공백 기준으로 나누어 배열화, map으로 각 문자에 차례대로 접근
  • 각 문자열의 인덱스를 짝수와 홀수를 가려 값을 소문자, 대문자로 변환하여 output에 누적
  • ["TrY", "HeLlO", "WoRlD"] 배열을 합쳐 한 문자열로 만듦 (+11점)

다른 사람의 풀이

다른 풀이 (1) - 정규표현식

function toWeirdCase(s){
  return s.toUpperCase().replace(/(\w)(\w)/g, function(a){return a[0].toUpperCase()+a[1].toLowerCase();})
}
  • 문장을 모두 대문자로 바꾼뒤 정규표현식으로 찾은 값을 콜백으로 대체한다
  • 정규표현식으로 각 문자를 두 개씩 묶어 콜백으로 홀수를 소문자로 대치한다

다른 풀이 (2) - 중첩된 배열 maping

function toWeirdCase(s){
  return s.split(' ').map(i => i.split('').map((j, key) => key % 2 === 0 ? j.toUpperCase() : j).join('')).join(' ')
}

문자를 공백 기준으로 나눠 배열화 -> 글자 기준으로 나눠 배열화 후 조건에 맞는 글자를 대문자화 -> 다시 모든 배열 합치기
map은 아주 유용한 배열 메소드이기 때문에 문자열을 배열로 바꾸어 사용한다

profile
© 가치 지향 프론트엔드 개발자

0개의 댓글