문제 풀기/JavaScripts

뮨제 36. (중요)문자열 다루기 기본 (난이도 10)(지수 표기법, 비교 연산자)

kagan-draca 2024. 7. 23. 16:19

 

처음 문제를 보고 단순히 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)
}