본문 바로가기
코딩테스트

프로그래머스 자바스크립트 문자열 다루기 기본

by min' 2023. 4. 23.
728x90
반응형

 

 

- 문제 설명

문자열 s의 길이가 4 혹은 6이고, 숫자로만 구성돼있는지 확인해주는 함수, solution을 완성하세요.
예를 들어 s가 "a234"이면 False를 리턴하고 "1234"라면 True를 리턴하면 됩니다.

 

처음에는 이 문제를 엄청 빨리 풀 수 있을 줄 알았다.

 

그도 그럴게 이 문자열을 모두 뭉뚱그려다가 isNaN()으로 false인지 true인지 판별하면 될 거라고 생각했으니까.

내가 isNaN()을 사용한 이유는, 문자열을 굳이 숫자로 바꾸지 않은 상태에서 숫자인지 판별해줄 만한 함수로
isNaN()이 매우 적합하다고 생각했기 때문임. (isNaN() 말고도 isNumber()이 있음.)

만약 이런 문제가 아니라면 문자열도 숫자가 맞는지 판별해준다는 점이 취약점이 될 수 있으므로

isNaN()을 보완한 Number.isNaN()을 사용하는게 좋음.

 

그런데 이상하게 테스트 케이스 11에서 자꾸만 오류가 났다.

 

결국 프로그래머스 질문하기 코너를 한 다섯 번 찾아본 끝에 이유를 알아냈다.

isNaN을 사용시 숫자 뒤에 붙은 e를 지수 취급한다는 것이다.

그렇다면 답은 하나였다. 문자열 s의 길이가 4 혹은 6일 때 문자열들을 모두 분리시켜 !isNaN()인지 확인하는 것.

 

 

- 처음 코드 :

function solution(s) {
  return s.length === 4 && !isNaN(s) ? true : s.length === 6 && !isNaN(s) ? true : false;
}

 

- 최종 코드 :

function solution(s) {
  if(s.length === 4 || s.length === 6) {
    return s.split("").every(c => !isNaN(c));
    // every() 메서드는 배열 안의 모든 요소가 주어진 판별 함수를 통과하는지 테스트. Boolean 값을 반환.
  } else {
    return false;
  }
}

 

728x90
반응형

댓글