ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 프로그래머스 lv1 문자열 다루기 기본 -js
    알고리즘(코딩테스트) 2023. 8. 4. 04:02

    문제

     

    간단한 문제라고 생각했다. 

     

     

    처음 접근했던 방식을 보자.

    문자열 s를 배열로 변경하고, map(Number)로 모든 원소를 숫자화시킨다. 그럼 문자열은 null로 표시가 되기때문에

    마지막 3항 연산자로 null이 있으면 false, 없으면 true를 반환했다.

     

    결과적으로는 틀렸다. null을 인식을 못하는 것 같았다.

     

    따라서 NaN으로 변경해주었다.

    이렇게 했더니 

     

    모든 케이스는 통과를 하긴 하지만, 3-4개의 테스트케이스를 통과를 하지 못했다.

     

    생각을 해보니, 문제를 다시 보면,

     

    문자열 s의 길이가 4 또는 6이라는 말이 중의적으로 들렸다.

     

    문자열 s의 길이가 4 또는 6이라고 확정적으로 알려주는 문장인지,

    혹은 s의 문자열 길이가 4 또는 6 인지도 검사하고, 또한 숫자로만 구성되어있는지 검사하는 함수를 작성하라는 것인지 애매한 표현이다.

     

    혹시 몰라 풀이법을 바꿔 보았다.

     

    문자열 s의 길이가 4와 6인지 체크를 우선적으로 하는 로직을 추가했다.

     

    이번엔 테스트케이스 11번이 문제다.

     

    하.....

     

    도저히 생각해도 더 이상의 경우의 수는 없었다.

     

    이제는 힌트를 받을 때가 되었다.

     

    많은 사람들이 이 부분을 틀리는지

    프로그래머스에서 테스트케이스 11번에 대한 힌트를 마련해주었다.

     

     

     

    망할놈의 지수표기법!

     

    저 'e'가 포함되어 있는 것을 true로 인식하여 테스트 케이스가 실패한다는 것이었다.

    이 'e'를 false로 반환되게끔 만들어주어야 한다.

     

    4번째 줄에 e를 포함시키는지 여부를 반환하는 로직을 포함시켜서 결국 정답이 되었다.

    같은 부트캠프 내에 같은 조 형님의 도움을 받았다.

     

    결국 형님의 도움을 받아 문제를 맞추긴 하였지만, 사실 코드의 가독성이 많이 떨어진다..

     

    다른 사람 풀이를 보자.

     

     

    이 코드에서 느낌표 두개 (" !! ") 가 앞에 붙은 것을 볼 수 있다.

    느낌표 한개는 not연산자라는 것은 모두가 안다.

     

    그렇다면 두 개는 무엇을 의미할까?

    결과적으로 느낌표 두개는 not연산자를 또 not 해주는 것이기 때문에 true를 반환한다.

     

    하지만 굉장히 다른 점이 있다.

     

    다른 타입의 데이터를 boolean값으로 반환 해주기 위한 용도로 사용된다고 한다.

     

    그럼 "느낌표 두개가 없다면" 저 solution 함수는 무슨 값을 반환할까?

     

    콘솔창에 찍어보자. 쉽게 설명하기 위해서 s = "a123" 이라고 가정하겠다.

    느낌표 두개가 없다면 solution 함수는 NaN를 반환한다. (조금 신기 ㅋㅋ)

     

     

     

    자 그럼 아래 사진을 다시 보자.

    맨 뒤에 s - 0 은 무엇을 의미하는 것일까?

    왜 문자열 s에 마이너스 0을 해주는 것이지?

     

    이 부분은 우아한테크코스 프리코스 미션 중 로또 추첨기 미션에서 본 적이 있다.

    친구에게 들은 꼼수중에 하나이다.

     

    문자열 s에 " - 0 " 을 굳이 해주는 이유는,

     

    문자열을 숫자로 변환시키는 꼼수이기 때문이다.!

     

    굉장히 간단한 문제였고 정답률도 80%이지만, 얻을 수 있는게 많은 문제였다.

     

     

     

Designed by Tistory.