문제 번호 : 1013 번
문제 바로가기 ☞ https://www.acmicpc.net/problem/1013
<<< 문제 내용 >>>
const fs = require('fs');
const filePath = process.platform === 'linux' ? '/dev/stdin' : './input.txt';
let input = fs.readFileSync(filePath).toString().trim().split('\n');
let N = input[0];
function isMatch(str){
const regexp = /^(01|(100+1+))+$/g;
let text = str.match(regexp)?.reduce((acc, cur) => acc+cur,"");
if (text === undefined) text = text || 0;
return (str.match(regexp)?.reduce((acc, cur) => acc+cur,"") === str);
}
for(let i = 1; i <= N; i++){
if(isMatch(input[i])) console.log("YES");
else console.log("NO");
}
* 정규식을 짜는데 굉장히 어려웠던 문제였습니다..
반례를 찾지못해 블로그를 찾다보니, C++같은 다른 언어와 자바스크립트의 정규식 동작원리가 조금 다른 것 같다는 느낌을 받았습니다. ( 정확한 원인은 모르겠음 )
결국, 개발자 톡방 등에 질문을 통해 처음과 끝에 ' ^ '와 ' $ ' 를 추가하면서 해결할 수 있었습니다.
다른 해결 방법으로는 replace와 regex를 접목시켜서 해결할 수 있는데, 이 편이 조금 더 빠르고 직관적인 것 같습니다.
도움이 되셨다면 공감 부탁드립니다.