ALGORITHM/PROGRAMMERS

[프로그래머스] 문자열 다루기 기본 | javascript

heeney 2021. 7. 3. 17:39
728x90

문제설명

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

제한사항

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

입출력 예

s return
"a234" false
"1234" true

작성한 코드

function solution(s) {
    return (s.length === 4 || s.length === 6) && s == parseInt(s)
}

아오 진짜.... if문에서 isNaN() 써보고 Number()도 써봤는데 테스트11에서 걸렸다.
어떤분은 parseInt()와 Number()를 동일하게 사용하면 틀렸다고 뜨니 변수를 따로 만들어 변수는 Number(), 비교할때는 parseInt()로 비교해 통과했다고 한다. 그 게시물을 보고 고민하다가 아예 그냥 parseInt()를 비교하는걸로 테스트해보니 통과되었다.

'==='가 아닌 '=='를 사용한 이유

  • '==' 서로 다른 유형의 두 변수의 값만 비교 (값 -> true) | 자료형은 판단하지 않는다
  • '===' 더 엄격하게 비교 (값 & 자료형 -> true) | 권장사항

 

isNaN, Number가 안되는 이유

https://programmers.co.kr/questions/14419

 

프로그래머스

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

programmers.co.kr

  • 문자열의 각 문자가 모두 숫자로되어있는지 확인 하는 것이므로 정수만 가능하다. === 소수는 안된다.

 

isNaN

이 문제에서 요구하는 것처럼 우리가 원하는 '숫자'를 찾아내기엔 무리가 있다.
숫자가 아닌 값도 true로 걸리는 등... 원하는 답을 명확히 찾기 어렵다.
실제로 '0.5'라는 소수를 isNaN로 확인해보았을때 false로 나온다.

Number

ex) '0.5' === 0.5
해당 문자열의 숫자를 있는 그대로 출력한다.
문자열 내에 숫자 말고도 문자가 섞여있으면 무조건 NaN로 나온다.

parseInt

ex) '0.5' === 0
소수를 출력해도 해당 소수점은 다 자르고 정수만 나온다.
문자열 내에 숫자 말고도 문자가 섞여있어도 숫자만 그대로 출력해주는 기능이 있다.

결론: isNaN, Number를 사용하면 틀리고 parseInt를 사용해야 한다.

 

+ 21.07.19 코드 수정

아무래도 '=='연산자는 사용을 하지 않는게 가장 좋아서 코드를 수정해보았습니다.
구글링 하던 도중 isNaN으로도 테스트를 통과한 분들도 있었습니다. (소스 구조는 달랐습니다!) 그거보자마자 멘붕...🤯 뭐지 ㅋㅋㅋ 더 공부해봐야겠습니다....아....아흐흑
우선 가장 편리한 방법은 정규표현식을 사용하는 겁니다.

function solution(s) {
    return (s.length===4 || s.length===6) && /^[0-9]+$/.test(s);
}
  • test() 메서드는 주어진 문자열이 정규 표현식을 만족하는지 판별하고, 그 여부를 true 또는 false로 반환합니다.
  1. ^ : 시작
  2. [0-9] : 0~9까지의 숫자
  3. + : 반복, 앞의 문자가 1개 이상인 경우
  4. $ : 종료

/^[0-9]*$/ 가 숫자만 있는지 확인할때 가장 많이 쓰는 방법이라고 합니다. 정리가 잘된 링크가 있어 공유합니다.
https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=jeongju02&logNo=221517177533

 

728x90