문자열 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;
}
다른 분의 코드를 보면서 익히고 싶은 함수가 있다면,
이제 열심히 습득하려고 한다.
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()
: 주어진 배열안의 모든 요소가 판별함수를 통과하는지 확인한다.