240828 TIL - Node 입문 1주차 3, 우당탕탕 알고리즘

LIHA·2024년 8월 28일
0

내일배움캠프

목록 보기
29/108
post-thumbnail
post-custom-banner

알고리즘

정규식 어떻게 쓰는거였더라...? 기억이 안 나!

구원의 블로그
여기도 좋았다

처음 계획은 나쁘지 않았다.
s의 length가 4나 6인지 확인하고, 정규식으로 숫자만 필터링해서 true false를 반환하자.
그런데 '정규식으로 숫자만 필터링' 부분에서 자꾸 false가 반환돼서 좀처럼 넘어가질 못했다.

오답코드 (나는 무엇을 하고 싶었던 걸까)

    const regexp = /^[0-9]$/gi;
    console.log(regexp.test(s))
    
    if((s.length === 4 ||s.length === 6) && regexp.test(s)){
        answer = true;
    } else answer = false;
    

아주 난리가 났다... 그 전에는 const regexp = /^[0-9]{4,6}$/gi; 라고 썼었다.

고민한 부분은 크게 두가지였다.
1. 일단 이 정규식 왜 안먹히지?
2. 정규식 부분에서 아예 길이(자릿수)까지 필터링 할 순 없을까?

  • 승현 튜터님의 정답코드. 정답은 항상 간결하다.
    function isValidString(s) {
    return /^\d{4}$|^\d{6}$/.test(s);
    }

    answer = isValidString(s);
    return answer;
  • 아니?! 내 코드도 자릿수만 맞춰 고쳐주니까 맞네?!
function solution(s) {
    var answer = true;
    
    // s.length를 4나 6인지 확인해보고
    // 정규식으로 s를 썰어서 숫자만 걸러보자
    // 이 둘을 모두 만족하면 true, 아니면 false인걸로
    
     const regexp = /^[0-9]{4}$|^[0-9]{6}$/;
    answer = regexp.test(s)
    return answer;
}

오?! 리하도 약에 쓰려면 없다더니 인가? (아니다)

^와 $는 뭘 쓰는걸까? 안쓰니 틀리는 TC가 있었다.

^는 시작점을, $는 끝점을 나타낸다고 한다. 근데 이 것을 쓰고 안 쓰고의 차이가 뭐가 다른걸까? 🤔

아니, 이 문제 왜 안풀려?!😡 - JS에 진정한 2차원 배열은 없다!(?)

충격적인 사실 알려준 참고 블로그들. 참고1 참고2
JS의 2차원 배열은 진짜가 아니라는(?) 것에서 발생하는 여러가지 문제가 있다.

  1. JS의 2차원 배열은 타 언어처럼 선언할 수 없다. const arr = [][];, const arr[3][4] 등이 안 된다는 얘기.
    (그래서 하다 하다 못해 JAVA 풀이를 봐도 별 도움이 되지 않았다.)
  2. 원인은 JS는 배열의 크기가 정해져있지 않기 때문이라고 한다. 동적 할당이라서 그렇다고.
  3. 그래서 여러 다른 트릭을 이용해 '마치 2차원 배열처럼' 만들어서 사용해야 한다.
  4. 그러면서 arr[1][2] 지목하면 console.log에 잘 찍히기는 한다는 것. (만들지는 못하는데)
  • 결론은 자바스크립트의 2차원배열은 1차원배열에 뭔갈 추가해서 만드는 형태라고 한다.
    Map, for문, Array.fill, Array.matrix 등을 쓴다고.
profile
갑자기 왜 춤춰?
post-custom-banner

0개의 댓글