문제 설명
머쓱이는 태어난 지 6개월 된 조카를 돌보고 있습니다. 조카는 아직 "aya", "ye", "woo", "ma" 네 가지 발음을 최대 한 번씩 사용해 조합한 발음밖에 하지 못합니다. 문자열 배열 babbling이 매개변수로 주어질 때, 머쓱이의 조카가 발음할 수 있는 단어의 개수를 return하도록 solution 함수를 완성해주세요.
입출력 예
babbling result ["aya", "yee", "u", "maa", "wyeoo"] 1 ["ayaye", "uuuma", "ye", "yemawoo", "ayaa"] 3
인자로 받는 배열의 문자열에 (babbling)
지정한 배열이 문자열이 (possible babbling)
포함되었는지 확인 후 해당 문자열을 삭제하고 다시 포함 여부를 살핀다.
그러나 삭제하며 병합된 문자열은 비교하면 안 된다.
(ex. yayae -> y''e -> ye) X
(ex. yayae -> y''e -> y, e) O
replaceAll() 내장함수가 생각났다.
function solution(babbling) {
let possibleBabbling = ["aya", "ye", "woo", "ma"]
let changedArr = []
for(let ele of babbling){
let str = ele
for(let i = 0; i < possibleBabbling.length; i++){
str = str.replaceAll(possibleBabbling[i], 0)
}
changedArr.push(str)
}
let resultArr = changedArr.filter(word => !word.match(/[^0]/))
let answer = resultArr.length
return answer;
}
테스트는 모두 통과하였지만
숫자 0을 넣어 병합된 문자열을 비교하지 않게 하여
개인적으로 클린 하지 않은 코드가 되었다.
reduce()와 some()을 사용하면 더 좋은 코드가 나올 것 같다.