머쓱이는 태어난 지 6개월 된 조카를 돌보고 있습니다. 조카는 아직 "aya", "ye", "woo", "ma" 네 가지 발음을 최대 한 번씩 사용해 조합한(이어 붙인) 발음밖에 하지 못합니다. 문자열 배열 babbling이 매개변수로 주어질 때, 머쓱이의 조카가 발음할 수 있는 단어의 개수를 return하도록 solution 함수를 완성해주세요.
문자열을 수정할 때마다 계속 새로운 객체를 만들어야 해서 Java에서는 다소 비효율적인 방법이라는 생각이 들긴 했지만 일단 풀었다^^;
contains()로 미리 제공된 발음들을 babbling의 원소들이 포함하고 있는지 체크한 다음, 포함 시 replace()를 통해 해당 문자를 공백으로 대체해 주었다. 그후 해당 원소의 공백을 다시 replace()를 활용해 빈 문자열로 바꿔준 다음, equals()로 그 원소에 빈 문자열만 남았는지 체크해 answer에 +1을 해준다.
처음에는 이중 for문 안에서 처음 대체를 할 때 바로 빈 문자열로 대체해 주려고 했는데, 그러니까 첫 번째 테스트 케이스를 통과하지 못했다. 입력값을 곰곰히 살펴 보니 wyeoo 같은 문자의 경우, ye가 포함되어 있어 빈 문자열로 처리하고 나면, 남은 문자열이 woo가 되어 발음할 수 있는 것처럼 인식하게 되는 거다. 이를 해결하기 위해 각 문자열 간의 영역을 분명히 하고자 공백 → 모두 체크 후 빈 문자열로 대체한 다음 equals()로 같은지 비교하는 방법을 사용해야 했다.
class Solution {
public int solution(String[] babbling) {
int answer = 0;
String[] pron = {"aya", "ye", "woo", "ma"};
for(String word : babbling){
for(String p : pron){
if(word.contains(p)){
word = word.replace(p, " ");
}
}
word = word.replace(" ", "");
if(word.equals("")) answer++;
}
return answer;
}
}
