Java 문제풀이 - 옹알이

Minseol·2023년 4월 5일
0

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

문제는 위와 같다.

나의 풀이

import java.util.*;

class Solution {
    public int solution(String[] babbling) {
        int result = 0;
        String[] basicBabbles = new String[]{"aya", "ye", "woo", "ma"};
        ArrayList<String> possibleBabbles = new ArrayList<>();
        String babble;

        for (int i = 0; i < 4; i++) {
            babble = basicBabbles[i];
            possibleBabbles.add(babble);
            for (int j = 0; j < 4; j++) {
                if (i != j) {
                    babble = basicBabbles[i] + basicBabbles[j];
                    possibleBabbles.add(babble);

                    for (int m = 0; m < 4; m++) {
                        if (i != m && j != m) {
                            babble = basicBabbles[i] + basicBabbles[j] + basicBabbles[m];
                            possibleBabbles.add(babble);

                            for (int n = 0; n < 4; n++) {
                                if (i != n && j != n && m!= n) {
                                    babble = basicBabbles[i] + basicBabbles[j] + basicBabbles[m] + basicBabbles[n];
                                    possibleBabbles.add(babble);
                                }
                            }
                        }
                    }
                }
            }
        }

        for (String possibleBabble : possibleBabbles) {
            for (String babbleString : babbling) {
                if (possibleBabble.equals(babbleString)) {
                    result++;
                }
            }
        }

        return result;
    }
}

더 나은 풀이

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

        for(int i =0; i < babbling.length; i++) {
            babbling[i] = babbling[i].replace("aya", "1");
            babbling[i] = babbling[i].replace("woo", "1");
            babbling[i] = babbling[i].replace("ye", "1");
            babbling[i] = babbling[i].replace("ma", "1");
            babbling[i] = babbling[i].replace("1", "");
            if(babbling[i].isEmpty()) {
                answer = answer + 1;
            }
        }

        return answer;
    }
}

리뷰

반드시 들어가야 하는 문자열이 "aya", "ye", "woo", "ma" 총 4개로 길이도 짧고, 최대 한 번이라는 갯수 제한이 있었기에 저런 주먹다짐식 코드가 나왔지만.. 모범 풀이가 훨씬 간결하고 범용적이다.

여담으로 정규식으로 바꾸는 풀이도 있다. 그런데 문제 조건을 정확히 만족하지는 않는다.

class Solution {
    public int solution(String[] babbling) {
        int answer = 0;
        for(int i=0; i<babbling.length; i++){
            if(babbling[i].matches("^(aya(?!aya)|ye(?!ye)|woo(?!woo)|ma(?!ma))+$")){
                answer++;
            }
        }
        return answer;
    }
}

aya가 최대 한 번 나와야 하는데 해당 정규식으로는 붙여서 두번 쓰는 것만 안될 뿐, 띄어져있다면 두 번도 쓸 수 있다.

profile
귀여운 설이에양

0개의 댓글