본문 바로가기

프로그래머스

[프로그래머스] 옹알이 (2)

https://school.programmers.co.kr/learn/courses/30/lessons/133499

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr


접근방법

1. babblingObj를 한글자씩 temp 문자열에 추가하고, 해당 문자열이 orginArr에 포함되거나 이전에 사용된 단어(lastString)와 같은지 확인한다.

2. 조건에 맞는 경우 temp 문자열을 초기화, lastString을 update한다.

3. temp 문자열의 길이가 0보다 큰 경우 발음하지 못하는 문자가 있다는것으로 판단하여 answer 변수에 1을 추가한다.

function solution(babbling) {
    var answer = 0;
    var originArr = ["aya", "ye", "woo", "ma"];
    
    for(var i = 0 ; i < babbling.length; i++){
        let babblingObj = babbling[i];
        
        var temp = ""
        let lastString = ""
        for(var j = 0 ; j < babblingObj.length ; j ++){
            temp += babblingObj[j]
            if(originArr.indexOf(temp) != -1 && temp != lastString){
                lastString = temp;
                temp = "";
            }
        }
        if(!temp.length > 0){
            answer++
        }
    }
    return answer;
}

 

결과 : 100점

 

개선

정규식을 활용한 새로운 풀이를 발견했다. 예상치 못한 접근 방식이었지만, 문제를 매우 간단하게 해결할 수 있었다.

다음에 꼭 정규식을 응용해 봐야겠다!

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);
}