Programmers/Level 1

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

emayom 2021. 7. 3. 21:56

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

 

👇🏻

Link_Click

 

 

👇🏻

시행착오

( + 코드를 작성하면서든 생각들.)


1.

Number()은 앞이든 뒤든 어디든 문자가 들어갈 경우 NaN을 반환하는 점이 생각나서

문자열이 숫자로 변환되면 true, NaN이면 false를 반환하도록 했다.

근데 둘 다 81.3점으로 제출은 안되었다.

(이때까진 내가 뭘 빼먹고 있는지 아무것도 몰랐다....😛)

function solution(s) {
    s = Number(s);
    return isNaN(s)? false : true;
} 
function solution(s) {
    //return (s/1 > 0)? true : false; <- 물론 얘도 안된다. 돌아가. 
    return (Number(s) > 0)? true : false;
} 

 

그런데 말입니다...! 자바스크립트에서 NaN은 정말 숫자가 아닐까요? 👇🏻👇🏼👇🏽

더보기

 

NaN은 정말 숫자가 아닐까?
떡하니 Not a Number 라며,,,


콘솔에 typeof NaN을 입력해보면
"number" 라고 나온다.

그렇지만 NaN  > 0 "문자열" > 0 로 비교해보면
false로 잘 나오는 것을 확인할 수 있다.

 

2.

문제를 제대로 안 읽은 내 잘못이다. 문제를! 제대로! 읽자!

조건에 "문자열 s의 길이가 4 혹은 6이고" 가 떡하니 적혀있다. 

하지만 이래도 93.8이다.. 어딘가 하나의 문제가 있다 ㅠㅠ

테스트 11번 에서만 자꾸 걸려서 찾아보니 나만의 문제가 아니었다.

 

( 👇🏻 혹시 저처럼 답답하실 분들을 위해 작성했습니다!)

 

* 테스트 11번 

원래는 isNaN()만으로도 테스트 통과가 가능했지만, 지수 형식(예를 들어 1e22 = 10의 22승)의 경우

isNaN(1e22)  =>  false를 리턴하기에 요구하는 "문자" 포함 여부를 확인하는데서 실패인 것이다...!

 

function solution(s) {
    return (s.length == 4 || s.length == 6) && (s/1 > 0)? true : false;
} 

4.

해결하는 과정에서 every() 함수를 배웠다.

리턴 타입이 boolean이라 return true / false를 명시해주지 않아도 되는 것이 편할 것 같다.

87.5점... 🤬 

function solution(s) {
    const isNumber = (currentValue) => currentValue > 0;
    
    return (s.split('').every(isNumber))? 
                (s.length == 4 || s.length == 6)? true : false : false;
 
} 

5.

먼저 길이가 4 나 6이 아니라면 false를 리턴하고 

그 이후에 문자열이 포함되어있는지 검사했다. 이렇게 하니 정확성 테스트를 통과할 수 있었다!

(!isNaN() 이전에 currentValue > 0으로 해봤는데 테스트 9, 10에서 막혀서 수정했다)

function solution(s) {
    const isNumber = (currentValue) => !isNaN(currentValue);
    
    if(!(s.length == 4 || s.length == 6)){
        return false;
    } else {
        return (s.split('').every(isNumber));
    }
} 

 

⚠️ 아래 내용은 모두 개인적인 참고 / 기록을 위한 용도입니다. 참고해주시고 편안하게 봐주세요 :)  ⚠️

***    혹시라도 잘못된 정보가 있다면  언제든지 알려주시면 감사하겠습니다  !    ***