처음 문제를 보고 단순히 Number.isInteger(Number(s))로 비교를 수행했다...
하지만, 여기에는 2가지 오류가 존재 했는데,
첫번째로,
"문자열 s의 길이가 4 혹은 6이고"라는 부분을 만족시켜주지 않아 계속 문제를 틀렸었다.
만약) "12345"인 문자열이 들어올 경우 Number함수에 의해 정수가 되고,
IsInteger에서 true가 되기 때문이다.
두번째로,
Number.isInteger(Number(s))를 사용할 경우
Number("3e10") 경우 지수 표기법에 의해
Number("3e10") = Number("3 * 10 ^ 10")으로 표기 돼
isInteger가 true가 돼 버린다...
위의 경우를 해결하기 위해서는 비교 연산자를 활용해야 하는데,
JavaScript에서 비교 연산자는 "==" 과 "==="으로
==을 활용해 문자열 == 정수 형변환 비교를 활용해 문제를 풀어야 했다...
"3e10" == Number("3e10"(3 * 10 ^ 10))
-> false
하지만, 위의 방식 처럼 문자열에 정수 뿐만이 아니라 문자가 포함 돼 있음을 알려줘야 했다...
그런데, s == Number(s)를 사용할 경우에도 정답에서 벗어난 테스트 케이스가 존재했다...
그래서 s == parseInt(s)를 사용해보니 정답이 됐다...
Number와 parseInt 차이는
로 Number는 문자열 전체를 정수로 변환하는데 이때
문자가 있을 경우 문자열 전체를 Nan으로 처리해버리고,
parseInt는 문자열에서 문자가 있을 경우,
그 이전 문자들 중에 정수인 부분만
정수로 출력해주는걸 볼 수 있었다...
하지만, 위의 차이로 인해 왜 Number()는 통과하지 못 했고,
parseInt()는 통과 했는지 아직 잘 모르겠다...
제출한 코드 :
function solution(s)
{
return (s.length == 4 || s.length == 6) && s == parseInt(s)
}
'문제 풀기 > JavaScripts' 카테고리의 다른 글
문제 38. 직사각형 별찍기(난이도 7)(repeat 함수 복습) (0) | 2024.07.23 |
---|---|
문제 37. 행렬의 덧셈(난이도 5)(map 함수) (0) | 2024.07.23 |
문제 35. 부족한 금액 계산하기(난이도 5)(가우스 공식) (0) | 2024.07.23 |
문제 34. (중요)문자열 내림차순으로 배치하기(난이도 7)(문자열 sort, join) (0) | 2024.07.23 |
문제 33. (중요)약수의 개수와 덧셈(난이도 10)(Number.isInteger) (0) | 2024.07.18 |