✨ Lv. 0 - 옹알이 (1)
문제 링크 : https://school.programmers.co.kr/learn/courses/30/lessons/120956
머쓱이는 태어난 지 6개월 된 조카를 돌보고 있습니다. 조카는 아직 "aya", "ye", "woo", "ma" 네 가지 발음을 최대 한 번씩 사용해 조합한(이어 붙인) 발음밖에 하지 못합니다. 문자열 배열 babbling
이 매개변수로 주어질 때, 머쓱이의 조카가 발음할 수 있는 단어의 개수를 return하도록 solution 함수를 완성해주세요.
babbling
의 길이 ≤ 100babbling[i]
의 길이 ≤ 15babbling
의 각 문자열에서 "aya", "ye", "woo", "ma"는 각각 최대 한 번씩만 등장합니다.각 문자열마다 발음 가능한 단어를 기준으로 split
을 반복하여 문자열이 남지 않는 경우가 바로 발음 가능한 단어로만 이루어진 옹알이에 해당합니다. 다만, wyeoo
와 같이 ye
로 먼저 split
을 진행하고 woo
로 split
하면 남는 문자열이 없기 때문에 잘못 판단될 가능성이 있습니다.
따라서 split
이후 join
과정에서 이를 구분해주기 위한 특정 문자로 join
하여 해결하였습니다.
function solution(babbling) {
const babble = ["aya", "ye", "woo", "ma"];
return babbling.reduce((result, current) => {
babble.forEach((v) => {
current = current.split(v).join(',');
});
console.log(current);
return [...current].filter((v) => v !== ',').length ? result : result + 1;
}, 0);
}
정규 표현식을 사용하면 이보다 더 간단하게 코드를 작성할 수 있습니다.
function solution(babbling) {
let result = 0;
const regex = /^(aya|ye|woo|ma)+$/;
babbling.forEach((v) => {
if(regex.test(v)) result++;
});
return result;
}
aya, ye, woo, ma
중 하나가 1번 이상 반복되며, 이외의 추가적인 문자 없이 시작하고 종료됨을 테스트하여 이를 만족하는 문자열의 개수를 return 합니다.