[프로그래머스] 옹알이(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)
}