JadenCase 문자열 만들기 lv2

김주형·2023년 3월 1일
0

문제 요구 사항

JadenCase란 모든 단어의 첫 문자가 대문자이고, 그 외의 알파벳은 소문자인 문자열입니다.
단, 첫 문자가 알파벳이 아닐 때에는 이어지는 알파벳은 소문자로 쓰면 됩니다. (첫 번째 입출력 예 참고)
문자열 s가 주어졌을 때, s를 JadenCase로 바꾼 문자열을 리턴하는 함수, solution을 완성해주세요.

요구사항 분석 및 접근방법

문자열 s 가 주어지면 split(' ')함수를 이용해서 단어별로 배열에 저장하고 첫 글자가 알파벳인지 아닌지 판별하여 알파벳이면 첫번째 문자만 대문자로 , 알파벳이 아니라면 그대로 소문자로 return하는 함수를 만드려고 했다.

첫번째 코드

function solution(s) {
  var answer = '';
  const a = s.split(' ');
  let pattern2 = /[a-zA-Z]/; //영어
  for (let i = 0; i < a.length; i++) {
    if (!pattern2.test(a[i][0])) {
      a[i] = a[i].toLowerCase();
    } else {
      //   a[i][0] = a[i][0].toUpperCase();
      //   console.log(a[i][0]);
    }
  }
  answer = a.join(' ');
  return answer;
}

a 라는 배열에서 첫번째 문자만 대문자로 바꾸고 콘솔을 찍어보니 이상하게 대문자로 바뀌지 않는 오류가 발생했다.

그래서 두번째 방식으로 charAt() 과 slice() 를 이용해서 첫번째 문자와 나머지 문자를 따로 저장한 뒤 그 값을 더한 후 a[i]에 저장하는 방식을 사용했다.

function solution(s) {
  var answer = '';
  const a = s.split(' ');
  let pattern2 = /[a-zA-Z]/; //영어
  for (let i = 0; i < a.length; i++) {
    if (!pattern2.test(a[i][0])) {
      a[i] = a[i].toLowerCase();
    } else {
      let first = a[i].charAt(0);
      let others = a[i].slice(1);

      a[i] = first.toUpperCase() + others.toLowerCase();
    }
  }
  answer = a.join(' ');
  return answer;
}

이렇게 구현하니 성공했다. 마지막으로 문자열로 출력해야함으로 다시 배열을 join(' ') 함수를 이용해 단어별로 문자열을 만들어 출력했다.

profile
프론트엔드 개발 지망생입니다.

0개의 댓글