프로그래머스 숨어있는 숫자의 덧셈(1) 자바스크립트 | isNaN

Chaeyeon Lee·2023년 5월 20일
0

🔅 1. 아이디어

우선 문자열을 배열로 바꾼 뒤, map을 통해 해당 원소가 숫자면 ans에 숫자만큼 더해줘야겠다.
근데 문제가 있었다. 해당 원소가 숫자인지, 문자인지 판별하는 방법을 몰랐기 때문...
그래서 구글링 했다.


🧑‍💻 2. 내 코드

function solution(my_string) {
    let answer=0;
    [...my_string].map(e=>isNaN(e) ? 0 : answer+=Number(e));
    return answer;
}

만약 원소가 숫자가 아니면, 새로운 배열에 0을 넣고, 아니면 answer에 숫자만큼 더한다.


🐣 3. 개념

map의 개념

📌 isNaN()

위 함수는 어떤 값 value가 NaN인지 판별한다. 값이 NaN이면 true, 아니면 false.
포괄적으로 매개변수가 숫자이면 false, 숫자가 아니면 true라고 반환하는 함수라고 생각하면 된다.

isNaN(value)

위 함수의 특이한 점은, isNaN 함수의 인수가 Number형이 아닌 경우, 이 값은 먼저 숫자로 강제 변형된다. 그 뒤에 NaN인지 판별됨.
그니까 다른 오류를 피하기 위해선 아래와 같이 생각해야한다.

isNaN = function(value) {
    Number.isNaN(Number(value));
}


다른 풀이로는, 정규 표현식을 쓴 게 있다.

function solution(my_string) {
    const answer = my_string.replace(/[^0-9]/g, '')
                            .split('')
                            .reduce((acc, curr) => acc + Number(curr), 0);
    return answer;
}

숫자가 아닌 모든 문자들을 ''로 치환한 뒤, ''로 split하여 배열로 만든다.
그다음 reduce 메서드를 통해 Number형으로 변환한 각 원소를 더한다.
제일 깔끔한 것 같다.



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

profile
프론트엔드 개발자 지망생

0개의 댓글