[알고리즘] - 옹알이 (2)

dev_woo·2024년 12월 24일
post-thumbnail

문제 풀이 : 10분 05초

1. 문제 설명을 제대로 읽고 문제를 정의하기
2. 연속된 문자열을 split() 으로 처리시에 join(" ") 을 사용하여 명확히 문자를 분리

문제 설명

머쓱이는 태어난 지 11개월 된 조카를 돌보고 있습니다. 조카는 아직 "aya", "ye", "woo", "ma" 네 가지 발음과 네 가지 발음을 조합해서 만들 수 있는 발음밖에 하지 못하고 연속해서 같은 발음을 하는 것을 어려워합니다. 문자열 배열 babbling이 매개변수로 주어질 때, 머쓱이의 조카가 발음할 수 있는 단어의 개수를 return하도록 solution 함수를 완성해주세요.

제한사항

1 ≤ babbling의 길이 ≤ 100
1 ≤ babbling[i]의 길이 ≤ 30
문자열은 알파벳 소문자로만 이루어져 있습니다.

1차 풀이

function solution(babbling) { // 1차 풀이 실패 : 연속 발음 불가 고려 X
    const says = ["aya", "ye" , "woo", "ma"]; // 아이가 발음 할 수 있는 단어
    const count = babbling.filter(say => { // 발음 조합
        let tempSay = say;
        
        for(const say of says){
            // 단어 발음 제거
            tempSay = tempSay.split(say).join(" ");
        }
        // 단어가 공백인지 확인
        return tempSay.trim() === "";
    }).length;

    return count;
}

문제 제한 조건 중 연속된 발음에 대한 내용을 미처 생각하지 못하고 문제를 풀이하였습니다.

2차 풀이

function solution(babbling) { // 1차 풀이 실패 : 연속 발음 불가 고려 X
    const says = ["aya", "ye" , "woo", "ma"]; // 아이가 발음 할 수 있는 단어
    const count = babbling.filter(say => { // 발음 조합
        let tempSay = say;
        
        for(const say of says){
            // 연속 발음 불가
            if(tempSay.includes(say.repeat(2))){
                return false;
            }
            // 단어 발음 제거
            tempSay = tempSay.split(say).join(" ");
        }
        // 단어가 공백인지 확인
        return tempSay.trim() === "";
    }).length;

    return count;
}

해당 문제는 동일한 문자열들을 어떻게 효율적으로 제거하는게 핵심인 문제였습니다.
연속된 발음이 문자에 포함 여부를 확인하고, 발음 할 수 있는 단어를 순차적으로 제거하여 빈 문자열 여부를 판단하는 방식으로 문제를 해결했습니다.

profile
꾸준히 한걸음씩

0개의 댓글