[프로그래머스] 옹알이(2)

2022. 12. 22. 20:22기록/Programmers

    목차

문제 링크

https://school.programmers.co.kr/learn/courses/30/lessons/133499

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr


나의 문제 풀이

function solution(babbling) {
  let answer = 0;

  const invalid = /(aya|ye|woo|ma)\1+/;
  const valid = /^(aya|ye|woo|ma)+$/;

  babbling.forEach((item) => {
    answer += !invalid.test(item) && valid.test(item) ? 1 : 0;
  });
  return answer;
}
  • invalid : 두 번 이상 같은 단어가 반복되는 정규표현식
    • () : 그룹화 (하위표현식)
    • | : 또는
    • \ : 역참조, \n 으로 하위표현식 참조 가능
    • \1 : 첫번째 그룹을 역참조하여 두 번 단어를 반복
    • + : 1회 이상 연속으로 반복되는 문자
  • valid : 해당 단어들의 반복으로만 이루어진 정규표현식
    • ^ : 시작
    • () : 그룹화
    • | : 또는
    • + : 1회 이상 연속으로 반복되는 문자
    • $ : 끝
  • 주어진 배열의 요소들을 하나씩 꺼냄
    • 두 번 이상 같은 단어가 반복되지 않고, 해당 단어들의 반복으로만 이루어졌을 경우
      • 정답 변수에 +1
      • 아닐 경우 정답 변수에 +0
  • 정답 변수 리턴

다른 사람의 문제 풀이

function solution(babbling) {
    const babblables = ["aya", "ye", "woo", "ma"];

    return babbling.reduce((possible, babbl, index) => {
        for (let i = 0; i < babblables.length; i += 1) {
            if (babbl.includes(babblables[i].repeat(2))) return possible;
        }
        for (let i = 0; i < babblables.length; i += 1) {
            babbl = babbl.split(babblables[i]).join(' ').trim();
        }
        if (babbl) return possible;
        return possible += 1;
    }, 0)
}