알고리즘/프로그래머스 - 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) 라는 단점이 있지만  정규표현식을 사용하지 않고 해결한 풀이다. 

 

 

반응형