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

이명진·2022년 6월 29일
0

코드카타

목록 보기
30/69

문제

문자열의 기본이라고 해서 문제를 풀게 되었다 .
조건은 문자열이 주어지는데 길이가 4또는 6이고 숫자로 이루어 졌을때 ture 아닐시에는 false를 리턴하면 된다.

내가 푼 풀이

function solution(s) {
  let answer = 0;
    if(s.length === 4 || s.length === 6){
    if(typeof Number(s)==='number'){
     answer = Number(s)+1
    }
  }
  return answer ? true:false
}

단순하게 쉬운문제라고 생각하고 문제를 풀었다.

일단 길이가 4또는 6일경우 매개변수를 Number로 형변환을 하고
삼항 연산자일 경우 0이면 false이니 무조건 1을 더해주고
삼항연산자를 활용했다

하지만 11번 테스트가 계속 틀리는 것이었다.

왜틀리는건지 계속 생각해보다가 Number에 대해서 검색했고
1E22 , 0.4E+2 이런 식들도 Number는 숫자로 변환한다는 것을 깨닫게 되었다.
결정적으로 도움을 찾기 위해서 질문하기를 봤는데 대부분 11번 문제에서 막히는 분들이 많았다
11번막히시는 분들 필독 에서 E,e에서 숫자로 변형하면 안된다고 알려주었다.
나는 숫자적 허용으로 지수 표현식이 가능할거라고 생각했는데
이경우에도 false를 리턴해야 한다는 것에 깨닫고 로직을 수정했다.

수정한 로직

function solution(s) {
  let answer = 0;
  if(s.length === 4 || s.length === 6){
        if(s.indexOf('E') !== -1 || s.indexOf('e') !== -1){
      return false
    }
    if(typeof Number(s)==='number'){
     answer = Number(s)+1
    }
  }
  return answer ? true:false
}

   if(s.indexOf('E') !== -1 || s.indexOf('e') !== -1){
      return false}

이 부분을 넣어서 e,E가 있을 경우 false를 리턴했다.
과연 맞을까? 돌려보니 테스트를 다 통과했다.

문제에서 E,e 지수 관련된 케이스도 언급해줬으면 쉽게 풀었을 텐데
테스트는 왜틀리는건지 이해를 못하니 시간을 많이 잡아먹게 되었다.

아무튼 문제 클리어
다른사람의 풀이를 보니 parseInt 와 isNaN을 활용하여 문제를 풀었다.

사실 11번 테스트에 막혀서 답을 찾아보게 되었다.
11번 테스트를 계속 생각해보다가 답이 없어서 벽만 계속 치고있다는 생각에..
정답인 코드를 봐도 내거랑 뭐가 다른지 이해를 못했었고 정답을 따라치기 싫었고
문제의 원인을 꼭찾고 싶어서 계속 검색을 하다가 해결할수 있었다.

parseInt 어떻게 풀었는지 알고싶어서
MDN에서 정의를 찾아봤는데 이해가 잘 안된다 ㅎㅎ..
parseInt를 사용한 사람들은 다 이해하고 쓴 건지 궁금하다 대단한 사람들이다
아직 많이 부족하다는 것을 깨닫고 parseInt와 isNaN을 공부하고 오늘도 마무리 한다

profile
프론트엔드 개발자 초보에서 고수까지!

0개의 댓글