알고리즘/프로그래머스

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

YJzero 2022. 9. 30. 16:29

 

https://school.programmers.co.kr/learn/courses/30/lessons/12918

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr


문제 설명

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

 

 

 

제한 사항
  • s는 길이 1 이상, 길이 8 이하인 문자열입니다.
  • s는 영문 알파벳 대소문자 또는 0부터 9까지 숫자로 이루어져 있습니다.

 

 

입출력 예

 

s return
"a234" false
"1234" true

 

 

 

해결 방법

처음엔 s를 숫자로 바꾸고 isNaN을 이용해서 ture이면 false를 리턴하게 하고, 그 당므에 길이가 4, 6일 땐 true를 아닐 땐 false를 리턴하게 했다. 하지만 문자가 포함되어 있어도 숫자로 변환될 수 있는 것들이 있다.

 

8진법 0o77 => 10진법 63

16진법 0xff => 10진법 255

 

지수표기법

21e6 => 21000000

 

이런 식으로 변환이 가능한 경우 isNaN을 이용하면 문자가 포함되어 있는데도 NaN이 아니어서 false가 되기 때문에 오류가 나게 된다. 그래서 반복문을 통해 한 글자씩 변환하여 판별하는 방법을 사용했다.

 

 

1. 반복문을 돌면서 숫자로 변환했을 때 NaN이면 false를 리턴한다.

2. NaN이 아닌 값들 중에서 문자열의 길이가 4 혹은 6인 경우 true를 아닌 경우 false를 리턴한다.

 

 

 

전체 코드
function solution(s) {
    const arrS = s.split("");
    
    for(let i = 0; i<s.length; i++){
        if(isNaN(parseInt(s[i], 10))) return false;
        }
    
    return s.length === 4 || s.length === 6 ? true : false;
    }