프로그래머스 - 옹알이 (1)

Lellow_Mellow·2023년 6월 9일
1
post-thumbnail

✨ Lv. 0 - 옹알이 (1)

문제 링크 : https://school.programmers.co.kr/learn/courses/30/lessons/120956

문제 설명

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


제한사항

  • 1 ≤ babbling의 길이 ≤ 100
  • 1 ≤ babbling[i]의 길이 ≤ 15
  • babbling의 각 문자열에서 "aya", "ye", "woo", "ma"는 각각 최대 한 번씩만 등장합니다.
  • 즉, 각 문자열의 가능한 모든 부분 문자열 중에서 "aya", "ye", "woo", "ma"가 한 번씩만 등장합니다.
  • 문자열은 알파벳 소문자로만 이루어져 있습니다.

풀이 코드 + 설명

각 문자열마다 발음 가능한 단어를 기준으로 split을 반복하여 문자열이 남지 않는 경우가 바로 발음 가능한 단어로만 이루어진 옹알이에 해당합니다. 다만, wyeoo와 같이 ye로 먼저 split을 진행하고 woosplit하면 남는 문자열이 없기 때문에 잘못 판단될 가능성이 있습니다.

따라서 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 합니다.


profile
festina lenta

0개의 댓글

관련 채용 정보