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

현수·2022년 1월 15일
0
post-thumbnail

문제설명

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


제한조건

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

입출력예시

sreturn
"a234"false
"1234"true

풀이


처음 제출했던 풀이

function solution(s) {
    return s.length === 4 || s.length === 6 ? (isNaN(s) ? false : true ) : false
}

처음에는 숫자가 아닌 것(Not-a-Number)을 판별하는 isNaN()을 사용했다. 비슷한 것으로 Number.isNaN()도 있는데, 이것은 단순히 숫자가 아닌 것에 true를 반환하는 것이 아닌 계산할 수 없거나, 숫자로 읽어들일 수 없는(ex - parseInt('apple')) 경우에 반환되는 NaN만을 판별하는 함수이므로 이번에는 사용하기 적절하지 않았다. 그런데 제출을 하고 보니 계속 한 개 케이스에서 알 수 없는 실패가 떴다.


다시 제출한 풀이

function solution(s) {
    return s.length === 4 || s.length === 6 ? (s == parseInt(s) ? true : false ) : false
}

아무리 생각해도 무엇이 문제인지 알 수 없어 다른 분들이 푼 방법을 확인했는데, '문제에서 숫자로만 구성되어 있는' 이라는 말이 정수로만 구성되어 있는지를 뜻하는 것이었다. 조금만 친절하게 적어주지... 그래서 정수가 아닌 그 외의 다른 수들에서도 false를 반환하는 isNaN()으로는 실패가 나온 것이다.


설명

삼항연산자 안에 삼항연산자를 넣는 방식으로 풀었다. 먼저 s의 길이가 4 또는 6이 맞는지 확인하고 맞다면 sparseInt(s)의 값이 같은지 비교해준다. 숫자로만 이루어진 문자열이 아니라면 결과물이 같지 않다는 것이 이용해 truefalse 중 하나를 return한다. (이때 s는 문자열이므로 ===가 아닌 ==를 사용해야 한다.

profile
언젠간 되겠지!

0개의 댓글

관련 채용 정보