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

Choi Seong Jin·2022년 11월 4일

프로그래머스

목록 보기
1/33

문제 링크 : 프로그래머스 옹알이(2)

처음에 작성한 코드 | 채점결과 : 75점

public int solution(String[] babbling) {
        int answer = 0;
        int idx = 0;
        String[] validBabbling = {"aya", "ye", "woo", "ma"};
        String[] unvalidBabbling = {"ayaaya", "yeye", "woowoo", "mama"};
        while(idx < babbling.length){
            for(String unval: unvalidBabbling){
                if(babbling[idx].contains(unval)){
                    idx++;
                    break;
                }
            }
            if(idx >= babbling.length) break;
            int length = 0;
            for(String checkBab: validBabbling){
               if(babbling[idx].contains(checkBab)){
                   length += checkBab.length();
                   if(babbling[idx].length() == length)
                       answer++;
               }
            }
            idx++;
        }
        return answer;
    }

발음 할 수 있는 것들을 validBabbling 배열에 저장하고, 두 번 연속으로 같은 것을 발음할 수 없으니 그것들을 unvalidBabbling에 저장했다.
그 후 babbling 배열을 순회하면서 unvalidBabbling 문자열을 포함하고 있으면 통과하고, 그렇지 않으면 검사하면서 validBabbling에 저장된 문자열이 포함되어있으면 그 길이만큼 length에 더해주고, length의 길이가 babbling에 저장된 문자열과 같아지면 한개씩 카운트해주는 식으로 작성했다.
하지만 계속 75점에서 넘어가지 못해 풀이를 찾아보고 다시 풀었다.

다시 작성한 코드

public int solution(String[] babbling) {
        int answer = 0;
        int idx = 0;
        String[] validBabbling = {"aya", "ye", "woo", "ma"};
        String[] unvalidBabbling = {"ayaaya", "yeye", "woowoo", "mama"};
        for(String bab: babbling){
            for(String unvalBab: unvalidBabbling){
                bab = bab.replace(unvalBab, "x");
            }

            for(String valBab: validBabbling){
                bab = bab.replace(valBab, "0");
            }
            int flag = 0;
            for(int i = 0; i < bab.length(); i++){
                if(!bab.subSequence(i, i+1).equals("0")){
                    flag++;
                    break;
                }
            }
            if(flag == 0) answer++;
        }
        return answer;
    }

검사결과 해당 문자열들이 있으면 그냥 넘어가거나, length라는 변수를 사용해 추가적인 검사를 진행했던 내 코드와는 다르게 문자열을 치환하고, 그 치환한 문자열을 다시 검사하니 훨씬 이해하기가 쉽고, 테스트도 모두 통과했다.

profile
백엔드 개발자 지망생입니다!

0개의 댓글