ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 프로그래머스 - 옹알이 (1)
    프론트엔드/프로그래머스 2024. 1. 31. 14:05
    728x90

    문제

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

    정답

    function solution(babbling) {
        let a = ["aya", "ye", "woo", "ma"]
        let answer = [];
        for(let i = 0; i < babbling.length; i++){
            for(let l = 0; l < a.length; l++){
                if(babbling[i] === a[l]){
                    answer.push(babbling[i]);
                } else {
                    for(let k = 0; k < a.length; k++){
                        if(a[l] !== a[k]) {
                            if(babbling[i] === a[l] + a[k]){
                                answer.push(babbling[i]);   
                            } else {
                                for(let j = 0; j < a.length; j++){
                                    if(a[l] !== a[k] !== a[j]) {
                                        if(babbling[i] === a[l] + a[k] + a[j]){
                                            answer.push(babbling[i]);
                                        } else {
                                            for(let p = 0; p < a.length; p++){
                                                if(a[l] !== a[k] !== a[p]){
                                                    if(babbling[i] === a[l] + a[k] + a[j] + a[p]){
                                                        answer.push(babbling[i]);
                                                    }
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }   
                }
            }
        }
        return answer.length;
    }
    • (for(let i = 0; i < babbling.length; i++)) : babbling 배열을 순회합니다.
    • (for(let l = 0; l < a.length; l++)) : a 배열을 순회하며 첫 번째 단어를 선택합니다.
    • (for(let k = 0; k < a.length; k++)) : 두 번째 단어를 선택하며, 중복을 피하기 위해 a[l] !== a[k] 조건을 사용합니다.
    • (for(let j = 0; j < a.length; j++)) : 세 번째 단어를 선택하며, 중복을 피하기 위해 a[l] !== a[k] !== a[j]와 같이 조건을 사용합니다.
    • (for(let p = 0; p < a.length; p++)) : 중복을 피하기 위해 a[l] !== a[k] !== a[j] !== a[p]와 같이 조건을 사용합니다.각 조합에 대해 babbling[i]와 일치하는 경우, answer 배열에 추가합니다.

    코드 최적화

    function solution(babbling) {
        const wordSet = new Set(["aya", "ye", "woo", "ma"])
        let result = 0;
    
        for(const word of babbling) {
            let remainWord = '';
            let prevWord = '';
            for(const char of word) {
                remainWord += char;
                if(wordSet.has(remainWord)) {
                    if(remainWord === prevWord) break;
                    prevWord = remainWord
                    remainWord = ''
                }
            }
            if(remainWord === '') result++
        }
        return result;
    }
    • wordSet : 가능한 발음을 저장하는 Set을 생성합니다.
    • result : 조합된 발음의 개수를 저장할 변수를 초기화합니다.
    • 외부 for...of 루프 : babbling 배열을 순회합니다.
    • 내부 for...of 루프 : 각 단어에 대해 문자를 하나씩 확인합니다.
    • remainWord : 현재까지 확인된 부분 문자열을 저장하는 변수로, 문자를 하나씩 추가하여 발음 조합을 만들어냅니다.
    • prevWord : 이전에 확인된 부분 문자열을 저장하는 변수로, 현재까지의 부분 문자열이 중복되는지 확인하기 위해 사용합니다.
    • wordSet.has(remainWord) : 현재까지의 부분 문자열이 가능한 발음으로 조합된 경우를 확인합니다.
    • if(remainWord === prevWord) break : 현재까지의 부분 문자열이 이전에 확인된 부분과 중복된 경우 반복문을 종료합니다.
    • prevWord = remainWord : 현재까지의 부분 문자열을 prevWord에 저장하고, 중복을 방지하기 위해 remainWord를 초기화합니다.
    • if(remainWord === '') result++ : 현재까지의 부분 문자열이 가능한 발음으로 조합된 경우, result를 증가시킵니다.
    728x90
Designed by 0-SIK.