초보 개발자의 성장 일기

문자열 다루기 기본 본문

Development/Algorithm

문자열 다루기 기본

YUNA 2023. 11. 25. 10:22

문제 설명

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

 

 

나의 문제 해결 방법

배열로 만든 후 원소를 정수로 바꿔준 후 길이가 4, 6이 아니고 숫자가 아닌경우 false를 반환한다.

function solution(s) {
    const newArr = s.split('')
    
    for(let i=0; i<newArr.length; i++) {
        parseInt(newArr[i])
        if(newArr.length !== 4 && newArr.length!== 6 &&  isNaN(newArr[i]) == true) {
            return false
        }
        else {
            return true
        }
    }       
}

 

나의 풀이방법의 정답률을 53%였다. 자바스크립트에서는 숫자에 e가 붙으면 지수로 인식하여 문자인 경우도 그냥 숫자로 인식해버린다는 문제점도 발견했다.

 

변경한 나의 풀이

function solution(s) {
    if(s.length === 4 || s.length === 6){
        return s.split("").every(c => !isNaN(c)) 
    } else {
        return false;
    }
}

 

다른 분들의 풀이 방법을 조금 참고해서 더 간단하게 길이가 4, 6일경우를 if문 안에 넣어서 배열로 만든 후 모든 원소가 숫자일 경우 true를 반환하도록 하였다. 아닐 경우는 false로 반환하였다.

 

every()

자신을 호출한 배열의 요소를 순회하면서 인수로 전달된 콜백 함수를 호출한다. 콜백 함수의 모든 반환값이 모두 참이면 true, 한번이라도 거짓이면 false를 반환한다. 빈 배열일 경우 true로 반환한다.

 

다른 해결 방법

const solution = s => !!((s.length === 4 || s.length === 6) && !s.includes('e') && s - 0);

한줄로도 해결이 가능하다. 'e'가 지수로 인식할 수 있으니 제외해주면 된다.