🍀 코딩 테스트/알감자 스터디 (알고리즘 감 잃지말자)

2주차 문제 (JadenCase 문자열 만들기)

놀러와요 버그의 숲 2022. 6. 29. 02:04
728x90
반응형

 

 

 

 

1. 첫번째 시도 -> 실패

function solution(s) {
    var answer = s
  .split(" ")
  .map((word) => word[0].toUpperCase() + word.substr(1))
  .join(" ");

    return answer;
}

 

 

 

 

 

2. 두번째 시도 -> 실패

 

테스트1에서 통과를 못했듯이, 일단 소문자로 모두 초기화(toLowerCase()이용)를 한 다음에 메서드를 사용하기로 했다. 

function solution(s) {
    var answer = s.toLowerCase()
  .split(" ")
  .map((word) => word[0].toUpperCase() + word.substr(1))
  .join(" ");

    return answer;
}

 

 

 

 

3. 세번째 시도 -> 성공

function solution(s) {
    var answer = s
  .toLowerCase()
  .split(" ")
  .map((word) => word.charAt(0).toUpperCase() + word.substring(1))
  .join(" ");

    return answer;
}

 

궁금한점이 생겼다.

처음에 word[0]으로 했는데, 런타임에서 실패하고, 왜 word.charAt(0)은 성공한걸까?

무슨 차이가 있는지 궁금하다.

(2022.07.05 업데이트)

-> 팀원들이 많이 도와준 덕분에 답을 어느정도 알 수 있었다. 조건에서 공백문자가 연속해서 나올 수 있다는 조건 때문인 듯 하다.

연속해서 공백이 나와버리면 word[0]으로 접근을 해버리면 공백때문에 undefined가 반환되는 듯 하다. 

 

 

팀원 분 중 한 분이 하단의 블로그로 공유해주셨다. 

str[index] 같은 경우 범위를 벗어나면 undefined가 반환된다.

하지만 str.charAt(index) 같은 경우에는 빈문자열 ("")을 반환한다. 

https://velog.io/@tjpark1028/TIL6-string-index%EB%A1%9C-%EC%A0%91%EA%B7%BC

 

TIL#6 - string index로 접근

1.str[index] 배열에 접근하듯이 문자열 뒤 대괄호에 index값을 넣어서 index에 해당하는 문자를 반환한다. 📌Tip) index값 범위를 벗어나는 값이 입력되었을경우 undifined를 반환한다. 2.str.charAt(index) 1번

velog.io

 

 

https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/String/substring

 

String.prototype.substring() - JavaScript | MDN

substring() 메소드는 string 객체의 시작 인덱스로 부터 종료 인덱스 전 까지 문자열의 부분 문자열을 반환합니다.

developer.mozilla.org

https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/String/charAt

 

String.prototype.charAt() - JavaScript | MDN

charAt() 함수는 문자열에서 특정 인덱스에 위치하는  유니코드 단일문자를 반환합니다.

developer.mozilla.org

 

다른 팀원들 풀이도 소개할까 한다.

 

1.정규표현식을 이용한 풀이.

function solution(s) {
  return s.toLowerCase().replace(/\b\w/g, (a) => a.toUpperCase());
}

2. if/ else문을 이용한 풀이 (map안에서 split을 또 돌린이유는 연속된 공백을 처리하기 위함)

function solution(s) {
    let string = s.toLocaleLowerCase();
    let answer = string.split(" ").map((s) => {
               let arr = s.split("");
               if (arr[0] != null) arr[0] = arr[0].toUpperCase();
               return arr.join('');
              }).join(' ');
    
    return answer;
}

 

 

이 문제를 통해 배운점

 

1. 문자열 메서드 중에서 특정 문자를 인덱스로 찾아낼때는 charAt()함수를 활용하자.

 

2. 문자열 메서드 중에서 문자열을 자른 값을 반환하고 싶을때는 substring()함수를 활용하자. 

 

3. str[index] 같은 경우 범위를 벗어나면 undefined가 반환된다. 하지만 str.charAt(index) 같은 경우에는 빈문자열 ("")을 반환한다.