https://school.programmers.co.kr/learn/courses/30/lessons/12918
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
처음 풀이
false조건을 기준으로 문제 풀이를 시도했습니다. 먼저 s 문자열의 길이가 4가 아니고 6이 아닐때 상황을 거릅니다. 그리고 문자열을 문자하나하나씩 검사해 숫자가 아닐 경우의 수를 찾기위해 메서드 isNaN() 를 사용했습니다.
function solution(s) {
if((s.length!==4) &&( s.length!==6)){
return false
}
[...s].forEach(el=>{
let num =isNaN(el);
if(num){
return false;
} })
return true;
}
하지만 처음 문제 풀이에서 간과한 부분이 있었습니다. forEach 문 속 if 문안의 return 문이 solution 함수의 리턴문으로 인식할 줄 알았으나 forEach 문의 콜백함수의 리턴 키워드로 동작하는 듯 보였습니다. 그리고 콜백함수의 반환값은 forEach 함수에서 사용되지 않아 무시된것으로 생각됩니다. (forEach 에서는 return 문 무시하니까 자연스레 밖에 감싸진 함수 리턴 키워드라고 판단할 줄알았찌이) 그래서 isError 변수로 오류를 체크해 결과를 반환하는 로직으로 변경해 문제를 풀었습니다.
통과 코드
function solution(s) {
if((s.length!==4) &&( s.length!==6)){
return false
}
let error =false;
[...s].forEach(el=>{
let num =isNaN(el);
if(num){
error=true;
} })
return error?false:true;
}
관련 개념 정리
isNaN()
isNaN() 함수는 들어가는 인자가 숫자가 아닌지지 판별하며, 검사하는 인자가 숫자가 아닐때는 true 숫자가 맞으면 false를 반환합니다. 혼란스러운 케이스가 많아 Array.isNaN()를 대신 사용하는 걸 추천한다고 하네여.
- "123.23" 과 같이 숫자로 구성된 문자열은 숫자라고 판단해 false 를 반환합니다.
- "5e3" 지수 표기법으로 작성된 문자열 또한 숫자로 판단해 fasle를 반환합니다.
- 12*12.3 과 같이 계산식 또한 숫자라고 판단해 false 를 반환하지만 "2*12.3" 계산식이 문자화 되있다면 숫자가 아니라고 판단해 true를 반환합니다.
console.log(isNaN(123)); //false 숫자
console.log(isNaN("123")); //false 숫자
console.log(isNaN("5e3")); //false 숫자 (지수표기법)
console.log(isNaN("123.3")); //false 숫자
console.log(isNaN(12*12.2)); //false 숫자
console.log(isNaN("123.3*12")); //true 숫자 아님
console.log(isNaN("data")); //true 숫자아님
Number.isNaN()
주어진 값의 유형이 Number 이면서 값이 NaN 이면 true 를 반환합니다. "숫자가 아니다" 라는 개념과 "NaN(Not a Number)" 키워드는 자바스크립트에서 사실상 의미가 다르기 때문에 주의가 필요합니다. isNaN()는 "숫자가 아님"을 판별하는 메서드라면 Number.isNaN() 메서드는 "isNaN" NaN 이라는 키워드 워딩에 맞게 집중된 메서드라 생각이 드네요. 하지만 NaN 개념이 헷갈려서 주의해야겠지만요.
console.log(Number.isNaN("data")); //f
console.log(Number.isNaN(10)); //f
console.log(Number.isNaN("e10")); //f
console.log(Number.isNaN("1234")); //f
console.log(Number.isNaN(NaN)); //true
console.log(Number.isNaN(1234)); //f
출처
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
https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach
Array.prototype.forEach() - JavaScript | MDN
Array 인스턴스의 forEach() 메서드는 각 배열 요소에 대해 제공된 함수를 한 번씩 실행합니다.
developer.mozilla.org
'JavaScript' 카테고리의 다른 글
Property Attribute (0) | 2023.10.26 |
---|---|
Object.defineProperty() (1) | 2023.10.24 |
MSW.js으로 Mocking with TS (1) | 2023.10.03 |
var, let, const (0) | 2023.09.06 |
JavaScript에서 비동기 (0) | 2023.09.05 |