[코딩테스트] Programmers lv. 0 옹알이

윤태영 | Taeyoung Yoon·2022년 11월 1일
0

Coding Test

목록 보기
8/10

문제 설명

머쓱이는 태어난 지 6개월 된 조카를 돌보고 있습니다. 조카는 아직 "aya", "ye", "woo", "ma" 네 가지 발음을 최대 한 번씩 사용해 조합한 발음밖에 하지 못합니다. 문자열 배열 babbling이 매개변수로 주어질 때, 머쓱이의 조카가 발음할 수 있는 단어의 개수를 return하도록 solution 함수를 완성해주세요.

입출력 예

babblingresult
["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()을 사용하면 더 좋은 코드가 나올 것 같다.

0개의 댓글