[규식이형, 좀 맞자 2] 정규표현식 관련 문제 풀이(1)

SeHoony·2022년 9월 23일
1

코테준비

목록 보기
27/27
post-thumbnail

1. 풀이한 문제

  1. [백준] Contact(1013)(22분)(Gold-5)
  2. [백준] 한국이 그리울 때 서버에 접속하지(9996)(Silver-3)
  3. [백준] 잠수함 식별(2671)(6분)(Gold-5)
  4. [백준] 스러피(14906)(Gold-4) : 1차 실패 ->
  5. [백준] 출력형식이 잘못되었습니다(5177)(29분)(Silver-2)

2. 새로 알게 된 것

2-1. RegExp.test(str)

백준 Contact(1013번)문제를 풀 때 핵심로직이다.

/^(100+1+|01)+$/g.test(target) ? 'YES' : 'NO'

주로 정규표현식과 replace, match 함수를 조합하여 사용했다.

test()함수는 목표로 하는 문자열 통으로 정규표현식과 일치하는 지 확인할 때 쓰기 좋다. 반환값은 boolean이다.

2-2. new RegExp(정규표현식)

정규표현식 MDN을 참고하여 공부했다. 이 자료에 정규표현식에 대한 알짜 정보들이 많아서 한 번 읽어보는 거 추천!!

1) 리터럴 표현식 vs 생성자 표현식

let test1 = new RegExp(/^(1+)\s(1+23+)$/)
let test2 = new RegExp(`1+\s?1+${i.toString()}3+`)

이런 식인데 둘은 용도비용의 차이가 있다.
(용도) test1은 정규표현식이 변하지 않을 때 쓰고, test2는 정규표현식의 변화가 있을 때 쓴다.

(비용) test1은 변하지 않으니 코드를 읽을 때 컴파일 1회를 하고, test2는 런타임에 컴파일을 하게 된다. 따라서 반복문 안에 정규표현식이 있을 경우, 반복 횟수마다 컴파일이 된다.

(차이) test1은 정규표현식에 대각선 줄을 두 개 치는데, test2는 대각선을 지우고 따옴표로 대체한다.

이걸 쓸 때는 match()함수로 테스트 해줘야 하고, 매칭되는 것이 없을 때 반환은 null이다.

profile
두 발로 매일 정진하는 두발자, 강세훈입니다. 저는 '두 발'이라는 이 단어를 참 좋아합니다. 이 말이 주는 건강, 정직 그리고 성실의 느낌이 제가 주는 분위기가 되었으면 좋겠습니다.

0개의 댓글