알고리즘/프로그래머스 - JS
[프로그래머스] level.1 옹알이(2) ⭐️
개발자성장기
2023. 6. 19. 06:10
반응형
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
나의 풀이
미리 생각해둔 것
// 예외 처리
1. 같은 발음이 연속으로 있을 때 하지만 연속이 아니면 괜찮
2. 불가능한 발음이 포함되어있을 때 ex) "woowo"
풀이 순서
1. 연속으로 하는 옹알이가 있으면 제외시키기
2. 발음가능한 옹알이는 전부 공백으로 교체
3. 공백자체는 length가 0이기 때문에 모두 공백으로 교체되면 옹알이가 가능하고 하나라도 공백으로 교체되지 않으면 옹알이 불가능
function solution(babbling) {
let result = 0
const babblArr = ["aya", "ye", "woo", "ma"]
const babblingWithoutContinuity = babbling.filter((value) => {
return babblArr.every((babbl) => !value.includes(babbl.repeat(2)))
})
babblingWithoutContinuity.forEach((babbl) => {
const canBabbl = !babbl.replace(/aya|ye|woo|ma/g,"").length
if(canBabbl){
result += 1
}
})
return result
}
다른 사람 풀이
function solution(babbling) {
const regexp1 = /(aya|ye|woo|ma)\1+/;
const regexp2 = /^(aya|ye|woo|ma)+$/;
return babbling.reduce((ans, word) => (
!regexp1.test(word) && regexp2.test(word) ? ++ans : ans
), 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)
}
시간복잡도가 O(n^2) 라는 단점이 있지만 정규표현식을 사용하지 않고 해결한 풀이다.
반응형