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

이유정·2022년 10월 15일
0

문제 설명

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

제한 사항

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

입출력 예

s return
"a234" false
"1234" true


내가 작성한 코드

function solution(s) {
    // 숫자로만 구성되어 있는지 
    // split으로 나눠서 배열로 넣어 
    // 아 생각해보니까 배열안에 '1' '2' 다 문자열로 들어간다. 
    let number = ['1', '2', '3', '4', '5', '6', '7', '8', '9', '0']
    let arr = s.split('') // arr = ['a', '2', '3', '4']
    let count = 0; 
    for(let i=0; i<arr.length; i++){
        for(let j=0; j<number.length; j++){
            if(arr[i].includes(number[j])){
                count++
            }
        }
   }
    if(count === arr.length){
        return true;
    }return false; 
}

결과는?
테스트 30개 중 4개 실패,,,
찬찬히 코드를 다시 봐도 뭐가 틀린지 모르겠다.
다른 방법을 찾아볼까?

나는 문제를 풀때 예시를 보고 먼저 감을 잡는다.
알고보니까? 내가 문제를 제대로 안읽었다
'문자열 s의 길이가 4 혹은 6이고'의 조건을 만족시키지 않았다.
조건 추가해주니 통과!!!!!

조건 추가해준 코드

function solution(s) {
    // 숫자로만 구성되어 있는지 
    // 삼항 연산자? 
    // split으로 나눠서 배열로 넣어 
    // 아 생각해보니까 배열안에 '1' '2' 다 문자열로 들어간다. 
    let number = ['1', '2', '3', '4', '5', '6', '7', '8', '9', '0']
    let arr = s.split('') // arr = ['a', '2', '3', '4']
    let count = 0; 
    for(let i=0; i<arr.length; i++){
        for(let j=0; j<number.length; j++){
            if(arr[i].includes(number[j])){
                count++
            }
        }
   }
    if((arr.length===4 || arr.length === 6) && count === arr.length){
        return true;
    }return false; 
}

다른 사람의 풀이 1

다른 분의 코드를 보면서 익히고 싶은 함수가 있다면,
이제 열심히 습득하려고 한다.

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

1) isNaN(value)
: value 가 '' 안에 들어가 있어야 제대로 작동하는 것 같다.
숫자는 ''이걸로 감싸주든 안감싸주든 isNaN()이 제역할은 한다!

2) .every()
: 주어진 배열안의 모든 요소가 판별함수를 통과하는지 확인한다.

profile
팀에 기여하고, 개발자 생태계에 기여하는 엔지니어로

0개의 댓글