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

JuhyunKim·2022년 11월 9일
0

코딩테스트

목록 보기
8/8

프로그래머스 - 옹알이 (2)
https://school.programmers.co.kr/learn/courses/30/lessons/133499


옹알이 (2)

class Solution {
    public static String[] babblingArray = {"aya", "ye", "woo", "ma"};
    public static String[] doubleBabblings = {"ayaaya", "yeye", "woowoo", "mama"};
  
    public int solution(String[] babbling) {
        int answer = 0;

        for(String bab : babbling) {
            if(!isDoubleBabbling(bab)) {
                for(String str : babblingArray) bab = bab.replaceAll(str, " ");
                if(bab.replaceAll(" ","").equals("")) answer++;
            }
        }

        return answer;
    }

    private boolean isDoubleBabbling(String s){
        for(String bab : doubleBabblings) {
            if(s.contains(bab)) return true;
        }
        return false;
    }
}

옹알이 (1)과 달라진 조건은 발음할 수 있는 단어가 여러번 나올 수 있지만, 연속해서 나올 수는 없다는 것이다.
연속해서 나온 것을 감지하는 것을 어떻게 해야 가장 효율적인가 생각해보다가 일단 제일 쉬운 버전으로 그냥 배열을 하나 더 만들어줬다.
연속해서 나오는 단어가 들어가있는지 판단하는 함수를 따로 빼주니 코드 가독성은 좋아졌는데 더 간단하게 할 수 있는 방법이 있지않을까.. 고민하다가 일단은 이게 최선인 것 같다.

프로세스만 보면 발음 가능한 단어가 들어있는 경우 그 index를 찾아서 그 뒤에 같은 단어가 들어있는지 판단하는 방법이 사실 맞는 것 같은데 효율성이 너무 떨어져서 이대로 올려본다.
이 문제에서는 배열의 사이즈도 4개 뿐이고 단어 길이도 짧아서 이런식으로 해도 괜찮지만 발음 가능한 단어의 개수와 길이가 훨씬 긴 경우 인덱스를 찾는 편이 나을 것 같다.

0개의 댓글