[Problem]
문제 설명
문자열 s의 길이가 4 혹은 6이고, 숫자로만 구성돼있는지 확인해주는 함수, solution을 완성하세요. 예를 들어 s가 "a234"이면 False를 리턴하고 "1234"라면 True를 리턴하면 됩니다.
제한 사항
- s는 길이 1이상, 길이 8이하인 문자열입니다.
- s는 영문 알파벳 대소문자 또는 0부터 9까지 숫자로 이루어져 있습니다.
입출력 예
s return
"a234" false
"1234" true
[Try]
문제 설명에 따라 문자열 s의 길이가 4 또는 6인 부분은 length를 이용했다. 문자열 s가 숫자로 이루어져 있다면 isNaN()에 넣었을 때 false 값을 문자가 섞여있다면 true 값이 나온다. 이를 이용해서 처음 코드 작성은 아래와 같이 했다.
function solution(s) {
return (s.length === 4 || s.length === 6) ? !isNaN(Number(s)) : false
}
코드 실행 결과 2개 테스트 예제는 통과했다.
But.... 제출 후 채점하기에서는 통과하지 못했다.
아무리 생각해도 테스트 11이 틀린 이유를 찾지 못했다.
검색을 통해 원인을 찾았다. 원인은 문자열로 받을 때, "12e234" 이렇게 받고 Number()에 넣었을 때 숫자 사이에 'e'가 있을 경우 e는 영어 e가 아닌 수학에서 사용하는 exponential로 받게 된다.
let a = "123e23"
console.log(Number(a)) // 1.23e+25
console.log(isNaN(Number(a))) // false
let b = "123easd123"
console.log(Number(b)) // NaN
console.log(isNaN(Number(b))) // true
숫자 사이에 'e'만 존재할 경우 exponential로 적용된다. But 다른 문자 같이 포함될 경우 문자가 된다. 따라서 코드 작성에서 'e'를 문자로 처리할 수 있는 처리를 넣어줬다.
[Solution]
function solution(s) {
return (s.length === 4 || s.length === 6) && !s.includes('e') ? !isNaN(Number(s)) : false
}
!s.includes('e')를 넣어서 e가 없을 때는 true를 있을 떄 false로 넘어갈 수 있게 만들었다.
[Conclusion]
제출 후 채점하기에서 모든 테스트를 통과한다.
문자열에서 'e'가 단독으로 숫자와 사용되고 있는지 다른 문자가 같이 사용되고 있는지 확인할 필요성을 느겼다. exponential에 대해서 따로 정리할 필요성이 있다고 생각했다.
'Self Dev. > TIL' 카테고리의 다른 글
2023.04.18 TIL - 소수 만들기 (0) | 2023.04.18 |
---|---|
2023.04.17 TIL - 로또의 최고 순위와 최저 순 (0) | 2023.04.17 |
2023.04.10 TIL - 화살표 함수와 this 바인딩 (0) | 2023.04.10 |
2023.04.05 TIL - <1주차 과제> [match 메소드, 정규표현식] (0) | 2023.04.09 |
2023.03.31 TIL - 풀스택 미니프로젝트(books-books) (0) | 2023.04.02 |