코테 문제는 풀 수록 현타가 오는 ㅜ;;
풀다 안풀려서 20분 멍때렸다가 방법을 뜯어 고쳐서 다시 생각하고 풀었음.
처음 시도때는 괜히 복잡하게 하려는 생각보단 기본적인 것부터 푸는 연습을 해보고
풀렸다면 그 이후에 좀 더 나은 방향으로 풀어보려는 시도를 해야 할 듯 싶음
연속된 발음이 있는가를 정규식으로 해결해보려다 꼬였는데 그냥 repeat을 써서 검사하면 정말...쉬운...하으..
join(' ')도 ''로 해주게되면 실패가 떠서 왜그런가 했더니 자르고 자르고하다보면 발음 가능한 것이 만들어질 수 있음
function solution(babbling) {
const pronounce = ['aya','ye','woo','ma']
let count = 0;
for(let i = 0; i< babbling.length; i++){
let babble = babbling[i]
for(let j =0; j<pronounce.length; j++){
if(babble.includes(pronounce[j].repeat(2))) break;
babble = babble.split(pronounce[j]).join(' ')
}
babble = babble.split(' ').join('')
babble.length === 0 ? count++ : null
}
return count;
}
아래는 정규식 풀이
정규식 제대로 공부좀 해야할 필요성이 느껴지는;;
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);
}
아래는 reduce를 이용한 풀이
갠적으론 이 풀이가 젤 맘에 듦
굳이 for문이 두개 있을 필요가 없어보여 하나로 합쳐봤는데 당연히 잘 됨.
이 문제처럼 특정 값의 acc? 누적 값이 필요하다면 reduce로 푸는 것을 생각해봐야 할듯
function solution(babbling) {
const babblables = ["aya", "ye", "woo", "ma"];
return babbling.reduce((possible, babbl, index) => {
for (let i = 0; i < babblables.length; i += 1) {
if (babbl.includes(babblables[i].repeat(2))) return possible;
}
for (let i = 0; i < babblables.length; i += 1) {
babbl = babbl.split(babblables[i]).join(' ').trim();
}
if (babbl) return possible;
return possible += 1;
}, 0)
}