문자열 다루기 기본
2023. 4. 11. 11:37ㆍ스터디/ALGORITHM
문자열 다루기 기본
코딩테스트 연습 > 연습문제 > 문자열 다루기 기본
문제 설명
문자열 s의 길이가 4 혹은 6이고, 숫자로만 구성돼있는지 확인해주는 함수, solution을 완성하세요. 예를 들어 s가 "a234"이면 False를 리턴하고 "1234"라면 True를 리턴하면 됩니다.
제한사항
s
는 길이 1 이상, 길이 8 이하인 문자열입니다.s
는 영문 알파벳 대소문자 또는 0부터 9까지 숫자로 이루어져 있습니다.
입출력 예
s | return |
a123 | false |
1234 | true |
문제 풀이
function solution(s) {
// 길이 확인 (4또는 6)
// 전부 숫자인지 확인 (나누었을때 NaN이 나오면 숫자가 아님, NaN은 Falsy한 값) isNaN 숫자면 false 숫자가 아니면 true
console.log("숫자 판단1 : ",typeof (+"1e22")) // 1e22, 알파벳 e가 포함되어서 지수형으로 판단 가능한 문자열이 들어오면 문제가 생김
if(s.length === 4 || s.length === 6){
let strArr = [...s].filter(function(x){
return isNaN(x/1)
})
if(strArr.length > 0){
return false
}else{
console.log(">>>",strArr)
return true
}
}else{
return false
}
}
코드 리뷰
isNaN()
함수를 통한 숫자여부 판단
function solution(s) {
if(s.length === 4 || s.length === 6){
for(let i = 0; i < s.length; i++){
if(isNaN(s[i]/1)){
return false;
}
}
return true;
}else{
return false;
}
}
느낀점
간단하든 아니든 코드리뷰는 중요하단 것 같다.
처음 이 문제를 풀때 자바스크립트의 묵시적 형변환을 이용해서 넘어오는 값을 숫자로 나누어지는지로 숫자 여부를 판단했었다.
대부분의 테스트 케이스를 통과하지만 '1e22' 형태의 string 값이 넘어오면 숫자로 나누었을때 해당 스트링을 묵시적으로 지수형 숫자로 판단하고 나누어지기 때문에 isNaN을 사용해도 정상적으로 문자열에 숫자만 있는지 여부를 판단할 수 없었다. 고민하다가 문자열의 문자 하나하나 판단하는 수 밖에 없다고 생각해서 복잡하게 포문을 돌렸는데 같은 로직이라도 간단하게 처리가 가능해서 많은 공부가 필요하다고 생각했다.
'스터디 > ALGORITHM' 카테고리의 다른 글
이상한 문자 만들기 (0) | 2023.04.11 |
---|---|
수박수박수박수박수박수? (0) | 2023.04.11 |
나누어 떨어지는 숫자 배열 (0) | 2023.04.11 |
2016년 (0) | 2023.04.11 |
x만큼 간격이 있는 n개의 숫자 (0) | 2023.04.11 |