프로그래머스 lv.1_ 이상한 문자 만들기

안녕하세요 Ayden 입니다.

오늘부터 프로그래머스 문제 1문제씩 풀고 분석해 보려고 합니다.
블로그에 올리기 부끄러운 풀이지만 왜 이렇게 풀었고 다른 사람은 어떻게 풀었는지 분석해 보면서 점점 나아지는 모습 보여드리겠습니다.

문제

문제 설명

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

제한 사항

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

입출력 예

입출력 예 설명

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

내 소스코드

function solution(s) {
       let arr = s.split("");
       let count=0;
       let answer="";

       for(let i=0; i<arr.length; i++){
         if(arr[i]===" "){
           count=0;
           answer+=arr[i];
         } else if(count%2===0){
           answer+=arr[i].toUpperCase();
           count++;
         } else if(count%2!==0){
           answer+=arr[i].toLowerCase();
           count++;
         }
       }
       return answer;
     }

let arr = s.split("") String 으로 받은 문자열을 arr에 배열로 하나씩 저장합니다.
count는 홀수(1, 3, 5, ...)와 짝수(0, 2, 4, ...)를 구분하는 flag 숫자로 지정하였습니다.
공백포함 각 문자가 저장되어 있는 arr를 for문을 돌아 하나씩 점검합니다.


if(arr[i]===" "){
          count=0;
          answer+=arr[i];
        }

공백을 만나면 count를 0으로 초기화 해주고 공백을 그대로 answer에 넣습니다.


else if(count%2===0){
           answer+=arr[i].toUpperCase();
           count++;
         }

그렇게 count가 짝수라면 arr[i]에 있는 요소를 대문자로 변환해 answer에 넣은 후 count를 증가 시킵니다. 증가된 count는 홀수 또는 공백을 만나 0이 됩니다.


else if(count%2!==0){
           answer+=arr[i].toLowerCase();
           count++;
         }

count가 홀수라면 arr[i]에 있는 요소를 소문자로 변환해 answer에 넣은 후 count를 증가 시킵니다.

다른 사람이 푼 코드

function toWeirdCase(s){
  return s.toUpperCase().
  replace(/(\w)(\w)/g, function(a){
  return a[0].toUpperCase()+a[1].toLowerCase();
  }
 )
}

코드 길이가 짧은 게 무조건 더 좋다고 볼 수 없지만, 제 코드에 비해 간결하게 푸신 것 같아 분석해보려고 합니다.


s.toUpperCase()로 받아 온 문자열을 대문자로 변환시킨 다음 문자열 변환 함수인 replace를 사용했습니다. 나란히 붙어있는 두 문자를 뜻하는 정규식 표현으로/(\w)(\w)/g 사용했습니다.

function(a){
  return a[0].toUpperCase()+a[1].toLowerCase();
  }

a 는 나란히 붙어 있는 두 문자이며, 두 문자 중 첫 번째를 대문자 두 번째를 소문자로 표현했습니다.
제가 완벽히 이해한지는 모르겠으나, 제 코드 설명 보다 더 간결한 것 같죠? ㅎㅎ

좋은 웹페이지 즐겨찾기