TIL

6월 1일 TIL - 숫자가 아니면 true 반환하는 isNaN()

양죠니 2023. 6. 1. 21:00

6월 시작두 어김없이 til로 !!

 

당장 해결해야할 플젝은 마무리해서 오늘은 프로그래머스 풀면서 시간보냄

맨날 레벨 1 정답률 80퍼 이상만 풀다가 오늘 79퍼 풀었는데 ,,, 아니 1퍼 내렸다고 이렇게 어렵기 있음? ㅋㅋ 쿠ㅜ 결국 답지 구글링해서 풀었다 ...

 

https://school.programmers.co.kr/learn/courses/30/lessons/12918

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

이 문제 풀었구여

 

문자열의 길이가 4 또는 6안자 확인을 해주고 문자열의 구성이 숫자로만 구성되어있는지 true, false로 반환해줘야 하는 함수를 만들어야 한다.

 

1. 문자열의 길이 확인은 if 문 안에 array.length()로 6 또는 4 로 확인을 해주고

2. 문자열이 숫자로만 구성되어있는지 .. 이거는 관련 메소드를 구글링 해봤는데 isNaN()매소드를 사용하여 확인해주면 될 것 같았다

 

근데 mdn 문서의 isNaN 메소드를 확인해보니까, 예외가 많이 있는 함수가 있는 것 같은.. 

https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/isNaN

 

isNaN() - JavaScript | MDN

isNaN() 함수는 어떤 값이 NaN인지 판별합니다. isNaN 함수는 몇몇 혼란스러운 케이스을 가지고 있으므로, ECMAScript 2015에서 추가한 Number.isNaN()으로 바꾸는 편이 좋을 수도 있습니다.

developer.mozilla.org

NaN이 not a number 이란 뜻으로 받은 매개변수의 자료형이 숫자가 아니면 true, 숫자면 false를 리턴해주는 함수네여

 

function solution(s) {
    var answer;
    // 문자열 길이를 or 연산으로 확인하고 동시에 and 연산으로 isNaN 함수에 앞에 not연산을 붙혀 문자열만 조건문을 통과하게 했다
    if((s.length === 4 || s.length === 6) && (!isNaN(s))){
        answer = true;
    } else {
        answer = false;
    }
    return answer    
}

 

아니 코드 나름 깔끔하게 잘 썻네 .. 했는데 오류남 ㅠ ㅋㅋㅋㅋ

구글링을 해보니., 문자 e가 들어온다면 isNaN 함수가 e를 지수로 인식을 한대요.. 그래서 e가 들어와서 문자인 경우에도 숫자로 인식해버린다는데 그래서 그런듯 ㅠ 어이없어

 

글서 문자 하나하나를 array.split 메소드로 떼어주고 array.every() 메소드로 띄어낸 문자가 문자인지 아닌지 확인해야했음

https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Array/every

 

Array.prototype.every() - JavaScript | MDN

every() 메서드는 배열 안의 모든 요소가 주어진 판별 함수를 통과하는지 테스트합니다. Boolean 값을 반환합니다.

developer.mozilla.org

첨보는 메소드라 mdn 첨부하고

 

//s,split("")로 문자열을 문자 하나씩 띄어내고
//띄어낸 문자들을 every 메소드를 사용해서 모든 요소가 콜백함수로 넣은 판별함수를 통과하는지 테스트

s.split("").every((word) => {
          return !isNaN(word)
}

요렇게 적었습니다

 

그래서 조합해보면

function solution(s) {
    
    //문자열의 길이부터 확인하고
    //안에 숫자여부 확인하기
    if(s.length == 4 || s.length == 6) {
     return s.split("").every((word) => {
          return !isNaN(word)
      })
    } else return false
}

이렇게 해결완