[프로그래머스]문자열 다루기 기본

jaemin·2020년 10월 23일
0

프로그래머스

목록 보기
6/18
post-thumbnail

문자열 다루기 기본

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

제한 사항

  • s는 길이 1 이상, 길이 8 이하인 문자열입니다.

입출력 예

sreturn
"a234"false
"1234"true

풀이 과정 설계

s의 길이를 검사해서 4 혹은 6이 아닐 경우 false를 반환한다.
s.length가 4 혹은 6이 맞다면, +s가 NaN라면 false를, 아니라면 true를 반환한다.

풀이 과정

function solution(s) {
  if(s.length === 4 || s.length === 6) return !isNaN(+s);
  return false;
}

기본적으로 false를 반환하고 조건식 s.length === 4 || s.length === 6을 만족시킨다면 isNaN(+s)을 반환한다.
숫자가 아니라면 isNaN(+s)이 true이고 숫자라면 false이므로 !로 반전된 값을 return해야 한다.

그런데 이 풀이에는 문제가 있다. 만약 인수로 1e + 5이 들어온다면, 위의 코드대로라면 e를 숫자가 아니라고 판별해 false를 반환한다.
1e + 5 = 1 * 10 ^ 5는 지수표기법을 나타낸 숫자이다. 이것도 true로 반환하려면 어떻게 해야 할까?

몇 가지 방법이 있겠지만 정규표현식을 이용했다.

function solution(s) {
  if((s.length === 4 || s.length === 6) && /^[0-9]+$/.test(s)) return true;
  return false;
}

/^[0-9]+$/에서 //는 정규표현식의 시작과 끝을 알려준다.
[]바깥의 ^은 문자열의 시작을 알리고 $는 문자열의 끝을 알린다. [0-9]는 숫자만 허용한다는 뜻이다.
test(s)는 s가 . 앞의 정규표현식 패턴과 맞는지에 대한 결과를 불리언 값으로 반환한다.

따라서 답 :

function solution(s) {
  if((s.length === 4 || s.length === 6) && /^[0-9]+$/.test(s)) return true;
  return false;
}
profile
프론트엔드 개발자가 되기 위해 공부 중입니다.

0개의 댓글