본문 바로가기
Developer/Algorithm

Programmers 프로그래머스 코딩테스트 연습 - 이상한 문자 만들기 (JavaScript)

by roqkfrlfhr 2020. 8. 20.

Programmers 프로그래머스 코딩테스트 연습 - 이상한 문자 만들기 (JavaScript)

 

Programmers(프로그래머스)의 코딩테스트 연습문제 Level 1 중,

이상한 문자 만들기 문제를 JavaScript로 해결해 보도록 하겠습니다.

 

 

문제 설명

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

 

제한 사항

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

 

입출력 예

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

 

입출력 예 설명

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

 

작성한 답

solution.js

function solution(s) {
    return s.split(' ').map(el => el.split('').map((el, index) => index % 2 == 0 ? el.toUpperCase() : el.toLowerCase()).join('')).join(' ');
}

 

 

설명

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

입출력 예에 나와있는 "try hello world"를 "TrY HeLlO WoRlD"로 바꾸는 예시를 들어 설명 해드리도록 하겠습니다.

먼저 Parameter로 들어오는 string값 s, 즉 현재 제가 들어드리는 예시에서는 "try hello world"를 split(' ')을 사용하여 공백으로 나눠서 ["try", "hello", "world"] 배열을 만듭니다.

그리고 ["try", "hello", "world"] 배열을 map() 함수를 사용하여 "try, "hello", "world" 각 요소를 돌아줄겁니다.

처음 map() 함수 안의 첫번째 Argument인 el이 각각의 요소, 즉  "try, "hello", "world" 각각 뜻합니다.

그리고 그 el을 다시 split('')으로 공백없이 각 문자로 나눠 배열을 만들어 줍니다.

"try"는 ["t", "r", "y"], "hello"는 ["h", "e", "l", "l", "o"], "world"은 ["w", "o", "r", "l", "d"] 으로 말이죠.

그리고 또 그에 대해 map() 함수를 사용하여 각각의 문자들을 돌아줄겁니다.

첫번째 Argument인 각각의 요소, 즉 각 문자들을 뜻하는 el과, 두번째 Argument인 각각의 요소들의 index를 활용해 각 문자들의 index가 짝수면 toUpperCase() 함수를 사용해 대문자로, 홀수면 toLowerCase()를 사용해 소문자로 변환해주고 반환하면,

["t", "r", "y"]는 ["T", "r", "Y"]로,

["h", "e", "l", "l", "o"]는 ["H", "e", "L", "l", "O"]로, 

["w", "o", "r", "l", "d"]는 ["W", "o", "R", "l", "D"] 변환되고,

다시 join('')으로 공백없이 배열을 합쳐서,

["T", "r", "Y"]는 "Try"로,

["H", "e", "L", "l", "O"]는 "HeLlO"로,

["W", "o", "R", "l", "D"]는 "WoRlD"로 만듭니다.

그리고 문자의 index별로 대소문자가 변환된 위의 문자열들이 첫번째 map() 함수에서 return되어 들어가므로,

["try", "hello", "world"]가 ["TrY", "HeLlO", "WoRlD"]로 바뀝니다.

그리고 ["TrY", "HeLlO", "WoRlD"] 배열을 join(" ")으로 공백을 포함하여 다시 하나의 string으로 붙여주면

원하는 결과인 "TrY HeLlO WoRlD"를 얻어낼 수 있습니다.

(장황한 설명 죄송합니다.. 이해 안되시면 언제든지 말씀해주세요.)

 

 

 

도움이 되셨다면 공감, 댓글 부탁드립니다!

궁금하신 점이나 요청 사항은 언제든지 말씀 해주세요!

 

감사합니다.


댓글