본문 바로가기
알고리즘

21. 이상한 문자 만들기 (JavaScript)

by 프잘백 2022. 1. 17.
728x90

문제 설명

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

 

 

제한 사항

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

 

입출력 예시

 

 

나의 풀이

function solution(s) {
var A = s.split(" ");
var B = A.map((e,i)=> e.split('').map((r,j)=>{
    if(j%2==0){
        return r.toUpperCase()
    }
    else{
        return r.toLowerCase()
    }
}
        ).join("")
             ).join(" ")
return

1) 공백을 구분자로 split 한다. ==> [ [try], [hello], [world] ]

 

2) split된 각 요소를 글자 하나로 나눠주고(2-1) 짝수 인덱스의 글자를 대문자로 바꾸고(2-2) 다시 합쳐준다(2-3)

 

     2-1) [ [ [t], [r], [y] ] , [ [h], [e], [l], [l], [o] ], [ [w], [o], [r], [l], [d] ] ]

 

     2-2) [ [ [T], [r], [Y] ] , [ [H], [e], [L], [l], [O] ], [ [W], [o], [R], [l], [D] ] ]

 

     2-3) [ [ TrY ] , [ HeLlO ], [ WoRlD ] ]

 

3) 공백을 구분자로 join 한다.

 

모범 답안

 

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

}

1. s를 대문자로 바꾼다.

2. 연속한 두 문자를 모든 문자열에서 찾는다. (\w)(\w) : 연속한 두 문자, \w : 영어 알파벳, 숫자, 언더스코어(_)

3. 연속한 두 문자 중 인덱스가 0이면 대문자, 1이면 소문자로 바꾼다.

 

 

사용자 입장에서는 간편하고 알기 쉬운 코드지만, 연산속도를 비교해 봤을때 컴퓨터 입장에선 split, join으로 이루어진 코드가 더 간편한 듯 하다.

 

 

가면 갈수록 어렵다...

 

 

Split( ) , Join( )


str.split([separator[, limit]])

원본 문자열을 끊어야 할 부분을 나타내는 문자열(separator)을 나타낸다.

실제 문자열이나 정규표현식을 써도 된다. 문자열 유형의 separator가 두 글자 이상일 경우, 그 부분 문자열 전체가 일치해야 끊어진다.

separator가 생략되거나 str에 등장하지 않을 경우, 반환되는 배열은 원본 문자열을 유일한 원소로 가진다. 

separator가 빈 문자열일 경우 str의 각각의 문자가 배열의 원소로 하나씩 변환된다.

 

limit은 optional이고, 끊어진 문자열의 최대 제한 개수를 나타냄. 

 

 

 

arr.join([separator])

배열의 각 요소를 구분할 문자열을 지정한다. 이 구분자(separator)는 필요한 경우 문자열로 변환.

생략하면 배열의 요소들이 쉼표로 구분된다. 

separator가 빈 문자열이면 모든 요소들이 연속해서 연결된다.

 

 

댓글