프로그래머스 문제풀이/Level 1

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

류시명 2020. 4. 13. 21:59

문제

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

제한 사항

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

입출력 예

s return
a234 false
1234 true

접근

우선 길이가 4 혹은 6일 때 조건분기

isNaN() 함수를 이용해서 숫자인지 아닌지 확인하자

구현

const solution = s => {
    if (s.length === 4 || s.length === 6) {
        for (let letter of s) {
            if (isNaN(letter) || letter === " ") {
                return false;
            }
        }
        return true;
    }
    return false;
};
isNaN(''); // 거짓: 빈 문자열은 NaN이 아닌 0으로 변환. false 리턴
isNaN(' '); // 거짓: 공백이 있는 문자열은 NaN이 아닌 0으로 변환. false 리턴

위의 이유 때문에

if (isNaN(letter) || letter === " ")

라는 조건을 달았다.

다른 사람의 풀이

function alpha_string46(s) {
   return s.length == 4 || s.length == 6 ? !isNaN(s) : false 
}

원래 나도 이런 식으로 풀었으나 이런 풀이는 11번 케이스에서 계속 막혔다.

이런 케이스는 지수형식("1e22")의 문자열이 들어오면 문제가 생긴다.

1e22 이기 때문에 false가 리턴되어야 하지만

!isNaN(s);

에 의해 true가 리턴된다.

반응형