항해2주차 자바스크립트 프로그래머스 - 문자열 다루기 기본
나의 풀이
이번엔 ||, && 써보고싶었는데 다행히 잘됐음!
for문을 돌리다가 점점 혼란스러워서 간단히 생각해봤음
//문자열 길이 4 or 6
//문자가 들어가면 false
//숫자만 true
//문자길이가 4 or 6 이면서 숫자로만 구성된게 같다면
function solution(s) {
return (s.length === 4 || s.length === 6) && s == parseInt(s)
}
조원 풀이
실행 코드를 돌려보니 부분적으로 실패하는 경우가 생겼다
function solution(s) {
var answer = true;
if (s.length = 4 || 6) { // s의 길이가 4 혹ㅇs 6인 경우
for (let i = 0; i < s.length; i++) {
if (isNaN(s[i])) {
answer = false;
break;
} else {
answer = true;
}
}
} else {
answer = false;
}
return answer;
}
「isNaN()
isNaN은 is Not a Number이다.
매개변수가 숫자가 아닐 경우 true를 리턴하고,
매개변수가 숫자일 경우 false를 리턴한다」
혹시 isNaN이, 자바스크립트에서 숫자에 e가 붙으면 지수로 인식하나?
매니저님이 말씀하시길 3번째 문단에 if (s.length = 4 || 6) 이렇게 쓰는건 매우 안좋다고 하셨다.
if (s.length === 4 || s.length === 6) 이렇게 꼭 === 를 써주는게 좋다고 하셨다
== 만 쓰면 부분적으로 에러가 날 가능성이 있기때문이라고.
그럼 answer = false; 이렇게 쓰는 경우에도 === 를 써야되는걸까?
NO! answer = false; 이거는 false를 반환한다는 거니까 = 쓰는걸 맞지만
위에서처럼 비교할때에는 === 써야 부분 오류가 생기지 않는다!
다른 풀이
function solution(s) {
if(s.length != 4 && s.length != 6) return false;
for(var i = 0; i < s.length; i++) {
if(isNaN(Number(s[i]))) return false;
}
return true;
}
뭔말이고..?
(정규표현식).test("문자열") : "문자열"이 "정규표현식"과 매칭되면 true, 아니면 false반환
암튼 정규식표현 이라고 함. 무섭게 생겼다.
function alpha_string46(s){
var regex = /^\d{6}$|^\d{4}$/;
return regex.test(s);
}
// 실행하면 실패 나오는데 뭘까?
이렇게 풀면 에러가 생긴다는데
지수형식("1e22")을 넣었을 경우 문제가 됨.
아스키 코드 때문인듯
16진법 숫자도 막힘
지수형태 떄문에 if (s.includes('e') || s.length!==4 || s.length!==6 && isNaN(s)) 이렇게 바꿈
function alpha_string46(s) {
return s.length == 4 || s.length == 6 ? !isNaN(s) : false
}
//실행하면 실패나옴..뭐지?