https://programmers.co.kr/learn/courses/30/lessons/12918#
첫번째 시도
function solution(s) {
if(s.length === 4 || s.length === 6){
s = s*1; // s에 1을 곱하여 숫자로 만들어주었다.
if(Number.isInteger(s) === true)
return true;
}
return false;
}
테스트 11번에서 오류가 나왔다.
찾아보니 '1e22'를 테스트했을 때, 숫자로 인식하여 true가 반환되었다.
e를 숫자로 바꾸면 자연로그 의 밑이 되어 지수 표현이 되어 숫자 취급을 한다.
'1e22'에 *1을 해주면 1e+22가 나온다.
function solution(s) {
var answer = parseInt(s)
if((s.length === 4 || s.length === 6) && answer == s){ // answer 과 기존 s를 비교한다.
if(Number.isInteger(answer) === true)
return true;
}
return false;
}
다른 풀이 방법
1. 정규식
function alpha_string46(s){
var regex = /^\d{6}$|^\d{4}$/;
return regex.test(s);
}
function alpha_string46(s){
var result = false;
if((s.length == 4 || s.length == 6) && /^[0-9]+$/.test(s)) {
result = true;
}
return result;
}
2. isNaN함수 사용(지수 e 에 막힌다.)
function solution(s) {
return s.length === 4 || s.length === 6 ? !isNaN(s) : false;
}
js의 여러 함수가 존재하고 쓰임새를 잘 알아야겠다.
자주 볼 수 있는 정규식에 대해 한번 공부해보자