코딩테스트에서 공부하는 알고리즘이나 자료구조가 현업에서 어떻게 쓰일 수 있는지를 생각하면서 공부하는 스타일인데 정규표현식은 그 중에서도 현업에서 쓰임새가 매우 좋을 거 같다고 생각했다.
하지만 안쓰면 계속 까먹거나 구글링해서 써보기도 심적 거리가 멀었기 때문에, 이번 기회에 관련 문제를 많이 풀어서 친해지고자 블로그 한 켠에 자리를 마련했다.
정규표현식으로 해야 문제를 풀 수 있다!는 없지만, 이것을 알고 모르고의 차이는 알고리즘을 구현하는 시간과 코드의 길이에 큰 차이를 가져온다고 생각한다. 몰랐으면 잘 알아보자!
정규식 관련 아티클을 보고 밑의 방식을 이번에 새로 알게 되어서 정리해본다.
/<.*>/g
<>로 싸고 있는 문자열 중 가장 긴 것을 골라라
/<.*?>/g
<>로 싸고 있는 문자열 중 가장 짧은 것을 골라라
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;
}