Lv.1 - 옹알이(2)

송철진·2023년 5월 22일
0
post-custom-banner

문제 설명

머쓱이는 태어난 지 11개월 된 조카를 돌보고 있습니다. 조카는 아직 "aya", "ye", "woo", "ma" 네 가지 발음과 네 가지 발음을 조합해서 만들 수 있는 발음밖에 하지 못하고 연속해서 같은 발음을 하는 것을 어려워합니다. 문자열 배열 babbling이 매개변수로 주어질 때, 머쓱이의 조카가 발음할 수 있는 단어의 개수를 return하도록 solution 함수를 완성해주세요.

제한사항
1 ≤ babbling의 길이 ≤ 100
1 ≤ babbling[i]의 길이 ≤ 30
문자열은 알파벳 소문자로만 이루어져 있습니다.

입출력 예
babbling result
["aya", "yee", "u", "maa"] 1
["ayaye", "uuu", "yeye", "yemawoo", "ayaayaa"] 2

solution

function solution(babbling) {
  	// 1.
    let can = ["aya", "ye", "woo", "ma"]
    const cant = ["ayaaya", "yeye", "woowoo", "mama"]
    
    // 2. 연속 발음 제외하기
    for(let i=0; i<cant.length; i++){
        const regex = new RegExp(`${cant[i]}`, 'g')
        for(let j=0; j<babbling.length; j++){
            if(babbling[j].match(regex)) babbling[j] = ''             
        }
    }
  	// 3.
    babbling = babbling.filter(v=>v)
      
    // 4. 있는 발음 제외하기
    for(let i=0; i<babbling.length; i++){
        for(let j=0; j<can.length; j++){
            babbling[i] = babbling[i].split(`${can[j]}`).join(' ')          
        } 
      	// 5.
        babbling[i] = babbling[i].trim()
    }
  	// 6.
    return babbling.filter(v=>!v).length
}
  1. 할 수 있는 발음의 배열 can과 할 수 없는 발음의 배열 cant를 선언한다
  2. babbling의 요소 중에서 cant의 요소가 매칭되는게 존재하면 그 요소를 빈문자열로 대체한다
  3. 순회를 마치면 빈문자열을 제거한다
  4. babbling의 요소를 can의 요소로 쪼개고 공백으로 join한다
  5. can에 대한 순회를 마치면 공백뿐인 요소는 빈문자열로 대체한다
  6. 빈문자열인 값의 개수를 반환한다

정규표현식에 변수를 넣는 방법

const 변수 = '알고싶은패턴'
const regex = new RegExp(`${변수}`, 'g')	// /알고싶은패턴/g

solution2

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);
}
profile
검색하고 기록하며 학습하는 백엔드 개발자
post-custom-banner

0개의 댓글