개발 기록 남기기✍️

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

코딩 테스트 연습

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

너해동물원 2023. 7. 6. 14:22

🗒️ 문제 설명

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

 

⚠️ 제한 사항

  • s는 길이 1 이상, 길이 8 이하인 문자열입니다.
  • s는 영문 알파벳 대소문자 또는 0부터 9까지 숫자로 이루어져 있습니다.

 

👀 입출력 예

s return
"a234" false
"1234 true

❇️ 나의 풀이

[1트]

function solution(s) {
    const isValidLen = s.length === 6 || s.length === 4
    const isValidNum = !isNaN(s)
   return isValidLen && isValidNum
}

길이와 숫자 판별을 각 변수에 담아서 작성했다.

숫자로만 구성되어있는지 판단하기 위해서 isNaN 함수를 사용했다.

 

그런데.. 다 통과하는데 테스트 11번에서만 계속 통과되지 않았다.

왜 그런지 확인해봤더니...

 

🚨이런 문제가 있어요

대개의 프로그래밍 언어에서는 실수를 표기할 때 지수 표기법을 지원합니다. 예를 들어 5e3은 5 × 1000을, -4.01e-2는 -0.0401을 의미합니다. 그런데 문자열을 실수/정수형으로 형변환 하거나, 해당 문자열을 숫자로 인식할 수 있는지 판단할 때 지수 표기법이 쓰이는 경우가 있습니다. 문자열 안에 숫자가 아닌 문자가 있어도 지수 표기법으로 읽을 수 있다면 이를 숫자로 판별하는 겁니다. 이에 유의하여 라이브러리를 사용해야 합니다.

 

라고 한다. 테스트 케이스에 s 문자열 안에 e가 섞여 들어갔는데, 해당 문자열이 isNaN 함수에서 지수로 인식되어 isNaN을 돌렸음에도 불구하고 false가 나온 것이다. 그래서 해당 케이스도 includes로 같이 처리해주었다.

 

 

[2트]

function solution(s) {
    const isValidLen = s.length === 6 || s.length === 4
    const isValidNum = !s.includes('e') && !isNaN(s)
   return isValidLen && isValidNum
}

 

✍️ 리뷰

✔️ 정규표현식으로 풀었다면.... 코드가 한 줄로 줄었을텐데... ;_;