[JAVA] 프로그래머스 (Lv.1) 옹알이 (2)

AIR·2023년 9월 2일
0

링크

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


문제 설명

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


입출력 예제

babblingresult
["aya", "yee", "u", "maa"]1
["ayaye", "uuu", "yeye", "yemawoo", "ayaayaa"]2

나의 코드

class Solution {
    public int solution(String[] babbling) {
        int answer = 0;

        for (int i = 0; i < babbling.length; i++) {
        	//같은 발음을 연속으로 하지 못하기 때문에
            //그 경우의 수를 제외시킨다
            if (babbling[i].contains("ayaaya") || babbling[i].contains("yeye") || 
            		babbling[i].contains("woowoo") || babbling[i].contains("mama")) 
                continue;     
                
            //정규식을 이용해 aya, ye, woo, ma의 발음만으로 구성되는 문자열만 카운트한다
            if (babbling[i].matches("(aya|ye|woo|ma)+")) 
                answer++;            
        }
        return answer;
    }
}

다른 사람의 풀이

class Solution {
    public int solution(String[] babbling) {
        int answer = 0;
        
        for(int i = 0; i < babbling.length; i++) {
            if(babbling[i].contains("ayaaya") || babbling[i].contains("yeye") || 
            		babbling[i].contains("woowoo") || babbling[i].contains("mama")) {
                continue;
            }
            
            //그냥 replace대신 replaceAll메서드를 이용해 정규식을 써서
            //babbling[i] = babbling[i].replaceAll("(aya|ye|woo|ma)", "");
            //이 한줄로 적는게 나을거 같다
             babblings[i] = babblings[i].replace("aya", " ");
             babblings[i] = babblings[i].replace("ye", " ");
             babblings[i] = babblings[i].replace("woo", " ");
             babblings[i] = babblings[i].replace("ma", " ");
             babblings[i] = babblings[i].replace(" ", "");
            

            if(babbling[i].length()  == 0) answer++;

        }
        return answer;
    }
}

정리

이번 문제도 정규식에서 오래 걸렸다.
일단 연속적인 경우는 제외했기 때문에 발음에 해당하는 문자열만 골라내면 되는데
처음엔 "[aya|ye|woo|ma]+" 이렇게 []를 써야되는줄 알고 한참을 해맸다..
알고보니 []는 하나의 문자만 의미한다.. aya처럼 하나의 문자열로 그루핑을 하려면 ()를 썼어야 했다.
저것은 "[ayewom]+" 이렇게 쓴거나 다름없다. a, y, e, w, o, m가 하나라도 포함되면 매칭되는 것이다.
문제에 맞게 쓸려면 정규식을 다음과 같이 써야 한다.

babbling[i].matches("(aya|ye|woo|ma)+");                
profile
백엔드

0개의 댓글