개발/코딩테스트

[프로그래머스 | JavaScript] 옹알이 (1)

prpn97 2023. 4. 16. 21:20

<문제 설명>
머쓱이는 태어난 지 6개월 된 조카를 돌보고 있습니다. 조카는 아직 "aya", "ye", "woo", "ma" 네 가지 발음을 최대 한 번씩 사용해 조합한(이어 붙인) 발음밖에 하지 못합니다. 문자열 배열 babbling이 매개변수로 주어질 때, 머쓱이의 조카가 발음할 수 있는 단어의 개수를 return하도록 solution 함수를 완성해주세요.

 

<제한사항>
1 ≤ babbling의 길이 ≤ 100
1 ≤ babbling[i]의 길이 ≤ 15
babbling의 각 문자열에서 "aya", "ye", "woo", "ma"는 각각 최대 한 번씩만 등장합니다.
즉, 각 문자열의 가능한 모든 부분 문자열 중에서 "aya", "ye", "woo", "ma"가 한 번씩만 등장합니다.
문자열은 알파벳 소문자로만 이루어져 있습니다.

 

<입출력 예>

babbling result
["aya", "yee", "u", "maa", "wyeoo"] 1
["ayaye", "uuuma", "ye", "yemawoo", "ayaa"] 3

<문제 풀이>

function solution(babbling) {
    var answer = 0;
    let patterns = ["aya", "ye", "woo", "ma"]
    
    patterns.forEach(pattern=>{
       babbling = babbling.map(str =>{
           if(str === pattern){
               return '1'
           }else if(str.includes(pattern)){
               return str.replace(new RegExp(pattern, 'g'), '1');
           }else return str
       })
    })
let one = ['1']
one.forEach(patt=>{
    babbling = babbling.map(Str =>{
        if(Str === patt){
            return ''
        }else if(Str.includes(patt)){
               return Str.replace(new RegExp(patt, 'g'), '');
           }
    })
})
    babbling.forEach(blank =>{
    if(blank === ''){
        answer++
    }
})
    return answer
}

많이 복잡하게 푼 문제다.

요약하면, "aya", "ye", "woo", "ma"를 pattern이라는 변수로 선언, 

처음에는 pattern에 속한 단어를 ''로 바꿔서 해당 요소가 ''만 있을 경우 카운트하려 했다. 

 

그런데, 예시처럼 wyeoo의 경우, 중간에 ye가 있고,

woo가 갈라져있어서 woo로 볼 수 없는데,

wyeoo까지 다 ''로 바꿔버리는 문제가 생겼다. 

 

그래서 어차피 테스트케이스는 숫자가 없으므로,

pattern에 있는 글자가 나오면 다 1로 바꿔주도록 했다. 

그렇게하면 wyeoo는 w1oo가 되므로

pattern에 속한 단어만 있지 않아 추후 카운트되지 않는다. 

 

그리고, 1을 다시 빈 칸으로 바꿔주었다. 

이후 forEach로 돌며 요소가 ''일 경우 answer에 1을 누적해서

pattern만 있는 요소의 누적값을 구했다. 

 

<다른 풀이>

function solution(babbling) {
  var answer = 0;
  const regex = /^(aya|ye|woo|ma)+$/;

  babbling.forEach(word => {
    if (regex.test(word)) answer++;  
  })

  return answer;
}

나도 RegExp를 쓰게 된 경위가 pattern을 바로 ''로 바꾸려고 하다가

잘 안되어서 정규식 대신 메소드로 쓰게 된 것인데, 

 

내가 구현하려던 저 복잡한 것들이 여기 간단하게 정리되어 있어서

참고하면 좋을 것 같다.

728x90