문제 번호
알고리즘 분류
문제 풀이
정규식을 사용하지 않아도 문제를 해결할 수 있다. '*'를 기준으로 주어진 패턴을 split 한 다음 나누어진 두개의 패턴이 주어지는 입력들과 일치하는지 확인하면된다.
그러나 문제를 처음 접했을때 '정규표현식'을 사용하여 문제풀이를 시도하였기때문에 끝까지 정규표현식을 사용해서 풀이를 진행했다.
정규식이 익숙하지 않아서 정규식을 사용함에 있어서 MDN을 많이 참고하였다.
처음에는 주어지는 패턴을 new RegExp()를 사용하여 정규식으로 생성하고 Match()를 사용하여 정답을 찾으려하였다.
그러나 Match()는 문자열중에 해당 정규식과 일치하는 부분이 '있기만하면' 참으로 판단한다. 따라서 해당문제에 사용하기 위해서는 주어진 패턴을 조금 수정해서 정규식으로 제작하여야 한다.
우리는 '*'앞에 있는 문자열로 시작해서 '*'뒤에 있는 문자열로 끝나는 문자열만 'DA'로 처리해야한다. 그래서 우선 주어진 패턴을 '*'를 기준으로 split() 해준다. 이때 split()된 문자열뒤에 '/r'이 붙어서 trim()처리를 해주었다.
input[1] = input[1].split('*').map(_ => _.trim());
이제 나누어진 문자열중 앞부분에 해당되는 내용으로 시작해야하니 '^'를 사용해서 처리해준다.
input[1][0] = '^' + '(' + input[1][0] + ')';
그리고 나누어진 문자열중 뒷부분에 해당되는 내용으로 끝나야하니 '$'를 사용해서 처리해준다.
input[1][1] = '(' + input[1][1] + ')' + '$';
이제 나누어졌던 문자열을 다시 합쳐서 정규식으로 만들어야한다. 이때 '*'에는 소문자가 갯수상관없이 들어올 수 있으므로 '/w'를 사용하여 처리해줄것이다. 이때 '/'를 사용하기 위해서는 '//' 와 같이 사용해함에 주의한다.
let partten = new RegExp(input[1].join('(\\w)*').trim());
예제 입력2의 경우 위의 과정들을 거치게되면 다음과 같은 정규식이 탄생한다.
for (let i = 0; i < N; i++) {
//console.log(input[i+2].trim().match(partten))
if (input[i + 2].trim().match(partten))
answer += 'DA' + '\n';
else
answer += 'NE' + '\n';
}
전체코드
const input = require('fs').readFileSync('input.txt').toString().trim().split('\n');
let N = +input[0];
function sol() {
let answer = '';
// 시작과 끝을 생각해야함.
input[1] = input[1].split('*').map(_ => _.trim());
input[1][0] = '^' + '(' + input[1][0] + ')';
input[1][1] = '(' + input[1][1] + ')' + '$';
let partten = new RegExp(input[1].join('(\\w)*').trim());
//console.log(partten)
for (let i = 0; i < N; i++) {
//console.log(input[i+2].trim().match(partten))
if (input[i + 2].trim().match(partten))
answer += 'DA' + '\n';
else
answer += 'NE' + '\n';
}
console.log(answer.trim());
}
sol();
특이사항
정규식을 다루는건 더 연습해야한다. 문자열을 다룰때 '/n' 이나 '/r' 처럼 원하지않는 내용들이 포함될 수 있으니 적절하게 trim()을 사용해야한다.
'Algorithm > BaeKJoon' 카테고리의 다른 글
[JS][백준]2573_빙산 (0) | 2022.03.30 |
---|---|
[JS][백준]11057_오르막 수 (0) | 2022.03.30 |
[JS][백준]17615_볼 모으기 (0) | 2022.03.21 |
[JS][백준]5582_공톤 부분 문자열 (0) | 2022.03.21 |
[JS][백준]13549_숨바꼭질 3 (0) | 2022.03.11 |