알고리즘_문자열 다루기 기본

정재연·2022년 1월 17일
0

문자열 다루기 기본

1. 문제 설명

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

2. 제한 사항

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

3. 입출력 예

sreturn
"a234"false
"1234"true

4. 나의 문제 풀이

1. s가 숫자인지 아닌지?
2. s의 length 4,6으로 지정

간단하게 생각했지만 엄청난 고난을 줬던 문제..😵‍💫

function solution(s) {
  let answer = '';
    return answer = isNaN(s) === false  && ( s.toString().length === 4 || s.toString().length === 6 )? true : false;
}

solution('1234')	// true
solution('    ')	// true  앵?😳

isNaN은 빈값도 숫자로 반환했다.ㅠㅠ
trim도 써보고 정규식도 써봤지만, 해결이 되지 않았다.
(알고 보니 소숫점 테스트에서 결렸을지도..ㅠㅠ)
결국 다른 분들의 풀이를 찾아 보기 시작했다.
그렇게 만난 키워드 parseInt()!!
전에도 많이 봐왔는데 parseInt는 전혀 생각을 하지 못했다.
결국 parseInt()을 보고 문제를 마무리 할 수 있었다.

5. 문제를 풀면서 들었던 생각

처음 문제를 봤을때, 정말 간단 할 줄 알았다.
사실 정말 간단한 문제 였는데, 정확한 지식 메서드의 동작을 잘 알고 있어야 했던 문제였다.
단순히 숫자여서 isNaN 사용해서 예기치 못한 에러를 만났던 경우였다.
isNaN은 소숫점 뿐만 아니라 빈값도 숫자로 인식했다.
isNaN은 숫자를 false을 반환한다.


console.log(isNaN('  '))	// false -> 숫자로 인식
console.log(isNaN('13.33'))	// false -> 숫자로 인식

또, '=='와 '==='의 적절한 사용이 필요하다는 것을 알게 됬다.
막연히 '==='만 써왔는데 이 문제에서는 '1234'와 1234의 비교는 단순히 '=='로 하면 끝났었다.

주저리주저리 했지만, 개념을 잘 익히자!! 이상 끝😌

profile
코린이 개발자 :)

0개의 댓글