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


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라는 변수를 사용해 추가적인 검사를 진행했던 내 코드와는 다르게 문자열을 치환하고, 그 치환한 문자열을 다시 검사하니 훨씬 이해하기가 쉽고, 테스트도 모두 통과했다.