[Javascript]프로그래머스 - 문자열 다루기 기본

Isabel·2022년 3월 14일
3

문제 설명

문자열 s의 길이가 4 혹은 6이고, 숫자로만 구성돼있는지 확인해주는 함수, solution을 완성하세요. 예를 들어 s가 "a234"이면 False를 리턴하고 "1234"라면 True를 리턴하면 됩니다.

제한 사항

s는 길이 1 이상, 길이 8 이하인 문자열입니다.

입출력 예

a return
"a234" false
"1234" true

문제풀이

처음엔 아래와 같은 코드로 풀이를 했다.

function solution(s) {
    var answer;
    if(s.length === 4 || s.length === 6){
        if(isNaN(s)){ //s가 number이 아니면 false 리턴
            answer = false;
        } else {
            answer = true; // number이면 true 리턴
        }
    } else {
        answer = false;
    }
    
    return answer;
}

먼저 문자열의 길이가 4이거나 6인지 확인하고, 아니면 false를 리턴하고, 4 혹은 6이 맞다면 isNaN이라는 해당 값이 숫자인지 확인해주는 함수를 활용하여 숫자가 맞으면 true를, 아니면 false를 리턴하게 문제를 풀었다.

isNaN()
isNaN은 is Not a Number이다.
매개변수가 숫자가 아닐 경우 true를 리턴하고,
매개변수가 숫자일 경우 false를 리턴한다.

그런데 이렇게 문제를 풀면 한 case에서 오류가 발생하였다.

이유는 자바스크립트에서는 숫자에 e가 붙으면 지수로 인식하여 문자인 경우도 그냥 숫자로 인식해버린다는 것이었다.


function solution(s) {

    if(s.length === 4 || s.length === 6){
        return s.split("").every(c => !isNaN(c)) // 모든 요소가 number이면 true리턴
    } else {
        return false;
    }
}

이에 every 메소드를 사용하여 해당 문자열을 일일이 isNaN인지 확인하는 것으로 문제를 풀었다.

Array.prototype.every()

every()메소드는 배열 안의 모든 요소가 주어진 판별함수를 통과하는지에 따라 boolean값을 도출한다. 위에서는 모든 요소가 숫자가 맞으면 true를 return하고 어떤 요소라도 숫자가 아닌 것이 판별되면 false를 리턴할 것이다.

  • every((element) => { ... } )
  • every(callbackFn)

every는 callback이 false를 리턴하는 요소를 찾을 때까지 배열에 있는 각 요소에 대해 한 번씩 callbackFn 함수를 실행한다. 해당하는 요소를 발견한 경우 every는 즉시 false를 반환한다. 모든 값에서 참을 반환하면 true를 반환한다.

0개의 댓글