프로그래머스 Lv 1. 문자열 다루기 기본 (NaN 개념)

FE 개발자 신상오·2022년 6월 8일
0

프로그래머스

목록 보기
10/20
post-thumbnail

문제


잘못된 풀이

function solution(s) {
  
  let	len = s.length;

    if (len !== 4 && len !==6){
        return false
    }
    
    for (let i = 0; i < s.length; i++){
        if(Number(s[i]) === NaN){
            return false;
        }
    }
    return true;
}

NaN의 경우 number 타입이지만 NaN === NaNfalse 입니다

console.log(NaN === NaN) // false
console.log(typeof(NaN)) // number 

NaN

전역 NaN 속성은 Not-A-Number(숫자가 아님)를 나타냅니다.

NaN을 반환하는 연산에는 다섯 가지 종류가 있습니다.

  1. 숫자로서 읽을 수 없음 (parseInt("어쩌구"), Number(undefined))
  2. 결과가 허수인 수학 계산식 (Math.sqrt(-1))
  3. 피연산자가 NaN (7 ** NaN)
  4. 정의할 수 없는 계산식 (0 * Infinity)
  5. 문자열을 포함하면서 덧셈이 아닌 계산식 ("가" / 3)

맞는 풀이

function solution(s) {
    
    let len = s.length;

    if (len !== 4 && len !==6){
        return false
    }

    for (let i = 0; i < s.length; i++){
        if(isNaN(typeof(s[i]))){
            return false;
        }
    }
    return true;
}

⚠️ NaN은 비교연산자가 아닌 isNaN()으로 판별합니다

다른 풀이 (정규식)

/*
/\d{6}/: 6자리 숫자 포함
/^\d{6}/: 6자리 숫자로 시작
/\d{6}$/: 6자리 숫자로 끝
/^\d{6}$/: 6자리 숫자
/^\d{6}$|^\d{4}$/: 6자리 숫자 또는 4자리 숫자
*/

function solution(s) {
  let regex = /^\d{6}$|^\d{4}$/;
  return regex.test(s);
}
profile
주간 회고용 블로그입니다 (개발일지와 정보글은 티스토리에 작성합니다.)

0개의 댓글