본문 바로가기

프로그래머스/JavaScript

[프로그래머스 JavaScript] Level1 이상한 문자 만들기

- 한개 이상의 단어로 이루어진 문자열 s가 주어집니다.

- 공백은 꼭 한칸이 아닐수도 있습니다.

- 단어의 짝수번째 알파벳은 대문자, 홀수번째 알파벳은 소문자로 리턴합니다.

- 짝수/홀수의 기준은 공백으로 나눠 진 단어 기준입니다.

 

 

문장을 단어 기준으로 나눠줍니다.


function solution(s) {
  var answer = ''  
  var arr = s.split(/\s(?=\w)/)
  
  return answer;
}

저는 뒤에 단어를 가지고있는 공백을 기준으로 나눴습니다.

그럼 아래와 같이 arr이 만들어지게 됩니다.

이제 단어별로 각각의 홀수/짝수 인덱스를 구분하여 대문자/소문자로 바꿔줍니다.

function solution(s) {
  var answer = ''
  var arr = s.split(/\s(?=\w)/)
  
  answer = arr.map(function(c) {
  	return c.replace(/[a-z]/gi, function(m, i) {
    	if(i % 2 == 0) {
        	return m.toUpperCase()
        } else {
            return m.toLowerCase()
        }
    })
  })
  
  return answer;
}

 여기서 answer을 출력하면 각각 아래와 같이 출력됩니다.

이제 원래의 문자열 처럼 쓰어씌기를 붙여 문자열로 만들면됩니다.

function solution(s) {
  var answer = ''
  var arr = s.split(/\s(?=\w)/)
  
  answer = arr.map(function(c) {
  	return c.replace(/[a-z]/gi, function(m, i) {
    	if(i % 2 == 0) {
        	return m.toUpperCase()
        } else {
            return m.toLowerCase()
        }
    })
  }).join(' ')
  
  return answer;
}

 

위에 코드를 화살표함수, 3항 연산자로 정리해줍니다.

최종코드

function solution(s) {
  var answer = ''
  var arr = s.split(/\s(?=\w)/)

  answer = arr.map(c => c.replace(/[a-z]/gi, (m, i) => m = i % 2 ? m.toLowerCase() : m.toUpperCase())).join(' ')

  return answer;
}