문제
프로그래머스 문제
내 풀이
- 이것도 처음에 똑바로 풀었다고 생각했는데 자꾸 몇 개 테스트 케이스를 못 통과해서 힘들었다.
- 알고보니 테스트 케이스가 "mayaa"일 때 맨 처음에 "aya" -> ""로 대체해버리면 남은 글자가 "ma"가 되어버리면서 발음할 수 있는 경우가 되어버리는 거였다. 그래서 replace를 ""가 아니라 " "로 처리했다.
function solution(babbling) {
const nephew = ["aya", "ye", "woo", "ma"];
for(var i=0; i<4; i++){
let regex = new RegExp(`${nephew[i]}`, "g");
for(var j=0; j<babbling.length; j++){
if(!babbling[j].includes(`${nephew[i]+nephew[i]}`)){
babbling[j] = babbling[j].replace(regex," ");
}
}
}
return babbling.filter(r => r.replaceAll(" ","") === "").length;
}
개선점
- 정규식 잘 쓰시는 분 거
- regexp1은 두번 이상 같은 말이 반복되지 않는 조건으로, regexp2는 해당 단어들의 반복으로만 이루어졌다는 조건으로 썼다.
function solution(babbling) {
const regexp1 = /(aya|ye|woo|ma)\1+/;
const regexp2 = /^(aya|ye|woo|ma)+$/;
return babbling.reduce((ans, word) => (
!regexp1.test(word) && regexp2.test(word) ? ++ans : ans
), 0);
}