항해 프로그래머스

항해2주차 자바스크립트 프로그래머스 - 문자열 다루기 기본

완두노예 2023. 1. 28. 12:07

나의 풀이

이번엔 ||, && 써보고싶었는데 다행히 잘됐음!

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 
}
//실행하면 실패나옴..뭐지?