[규식이형, 좀 맞자 2] 정규표현식 공략 1

SeHoony·2022년 9월 8일
0

코테준비

목록 보기
22/27
post-thumbnail

1. 들어가기 전

코딩테스트에서 공부하는 알고리즘이나 자료구조가 현업에서 어떻게 쓰일 수 있는지를 생각하면서 공부하는 스타일인데 정규표현식은 그 중에서도 현업에서 쓰임새가 매우 좋을 거 같다고 생각했다.

하지만 안쓰면 계속 까먹거나 구글링해서 써보기도 심적 거리가 멀었기 때문에, 이번 기회에 관련 문제를 많이 풀어서 친해지고자 블로그 한 켠에 자리를 마련했다.

정규표현식으로 해야 문제를 풀 수 있다!는 없지만, 이것을 알고 모르고의 차이는 알고리즘을 구현하는 시간과 코드의 길이에 큰 차이를 가져온다고 생각한다. 몰랐으면 잘 알아보자!

2. 새로 알게 된 정규표현식

정규식 관련 아티클을 보고 밑의 방식을 이번에 새로 알게 되어서 정리해본다.

2-1. 그리디

/<.*>/g
<>로 싸고 있는 문자열 중 가장 긴 것을 골라라

2-2. Lazy

/<.*?>/g
<>로 싸고 있는 문자열 중 가장 짧은 것을 골라라

3. 문제 풀이

3-1. [프로그래머스] 이진변환 반복하기

  • point
    1. string.match()의 결과, 매칭된 것이 있으면 배열로, 없으면 null로 반환
    2. toString(num)을 해서 이진법으로 반환

  • 나의 풀이(10분)

function solution(s) {
    var answer = [];
    let zero_cnt = 0
    let cycle = 0
    
    while(true){
        if(s === '1'){
            answer[0] = cycle
            answer[1] = zero_cnt
            return answer
        }
        const arr = s.match(/0/g)
        if(arr != null){
            zero_cnt += arr.length    
        }
        const len = s.replace(/0/g, '').length
        s = len.toString(2)
        cycle ++
    }
    
    return answer;
}
  • 코드 정리
    answer = [0,0]을 통해 0의 횟수나 전체 사이클 횟수에 대한 변수 지정을 생략할 수 있었다.
    (s.match(/0/g)||[])를 통해 기존의 string.match의 결과 중 null값을 처리하는 코드를 생략할 수 있었다.
function solution(s) {
    var answer = [0,0];
    while(s.length > 1){
        answer[0] ++
        answer[1] += (s.match(/0/g)||[]).length 
        s = s.replace(/0/g, '').length.toString(2)
    }
    return answer;
}
profile
두 발로 매일 정진하는 두발자, 강세훈입니다. 저는 '두 발'이라는 이 단어를 참 좋아합니다. 이 말이 주는 건강, 정직 그리고 성실의 느낌이 제가 주는 분위기가 되었으면 좋겠습니다.

0개의 댓글