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