[TIL] <2020.05.22> 문자열 다루기 기본

이성진·2020년 5월 22일
0

오늘은 아직 내가 모르는게 많다는 것을 깨달은 문제를 설명해보겠습니다.

문제 설명
문자열 s에 길이가 4 또는 6인 문자열이 들어옵니다.
이 문자열이 숫자로만 구성되어 있는지를 검출하는 함수를 만드는 것입니다.

문제만 읽어보면 정말 간단합니다.
그래서 저는 아래와 같이 코드를 작성했습니다.

function solution(s) {
    const len = s.length;
    return (len === 4 || len === 6) 
  	&& !isNaN(Number(s)) ? true : false;
}

결과는 실패...
저는 고민했습니다. 왜? 음...

그렇게 한 10분을 모든 경우의 수를 다 계산한 듯 다시 질문했습니다.
왜?? 난 맞은거 같은데 넌 왜 틀렸다하니

그리곤 아래와 같은 함수를 다시 만들죠

function solution(s) {
    const len = s.length;
    return (len === 4 || len === 6) && canNumber(s) ? true : false;
}
function canNumber(s) {
    let res = true;
    s.split("").forEach((a) => {
        if (!("0" <= a && a <= "9")) {
            res = false;
        }
    })
    return res;
}

저는 제 코드에서 !isNaN(Number(s)) 코드가 문제란 것은 알았습니다.
저기가 아니면 문제가 날 곳이 없었거든요.

결국은 문자열의 ASCII 코드를 비교하는 연산을 수행해야 했습니다.

그렇게 끝나려는 무렵 다른 사람들이 한 질문을 보니 다 저와 같은 케이스에서 오류가 나더라고요.

오류는 바로 "12.1"과 같은 소수점이 있는 케이스였습니다.

그렇죠.. "12.1" Number에 들어가도 숫자로 나오고 문자열이 4개 또는 6개로 나오는게 가능한...

이처럼 사용자의 입력은 우리가 예측보다 한 단계 위에 있다는 것을 다시 한 번 뼈져리게 느꼈습니다.

profile
개발보다 회사 매출에 영향력을 주는 개발자

0개의 댓글