처음에 문제 이해가 좀 힘들었다.
class Solution {
public int solution(String[] babbling) {
int answer = 0;
for (String s : babbling) {
if (s.contains("ayaaya") || s.contains("yeye") || s.contains("woowoo") || s.contains("mama")) {
continue;
} else {
if (s.contains("aya")) s = s.replace("aya", " ");
if (s.contains("ye")) s = s.replace("ye", " ");
if (s.contains("woo")) s = s.replace("woo", " ");
if (s.contains("ma")) s = s.replace("ma", " ");
if (s.contains(" ")) s = s.replace(" ", "");
if (s.length() == 0) {
answer++;
}
}
}
return answer;
}
}
이건 풀지 못했다!
도대체 단어를 포함하는걸 어떻게 인식시켜야 할까... 메서드를 새로 만들어서 그곳에서 char 단위로 작업해야할까 고민했다.
결국 다른 사람 풀이를 봤는데, contains와 replace라는 아주 근사한 메서드가 있었다.
contains로 발음 가능한 문자열이 있는지 확인하고, replace로 그 문자열을 바꿔주는 것이다.
그리고 바꿔준 문자열을 활용해서 이것이 발음할 수 있는 단어인지 판별하면 된다.
주의 할 사항은 빈문자열 ""이 아닌 " " 공백(또는 다른 것)으로 replace 해야한다.
이유는 공백으로 처리했을 경우 앞의 단어와 연결되어 또 다른 문자로 변경될 수 있기 때문이다.
ex) "yayae" : 이런 경우 바로 비어 있는 것으로 바꿔버리면 단어로 인식. 이런 것을 방지하기 위해 " " 했다가 ""으로 바꾸는 것.
contains, replace 메서드가 있는줄 내가 알았겠는가!
오늘은 자바의 메서드를 쭉 한번 봐보기라도 해야겠다.
public int solution(String[] babbling) {
int answer = 0;
for(int i=0; i<babbling.length; i++){
babbling[i] = babbling[i].replaceAll("ayaaya|yeye|woowoo|mama","1");
babbling[i] = babbling[i].replaceAll("aya|ye|woo|ma"," ");
babbling[i] = babbling[i].replaceAll(" ","");
if(babbling[i].equals("")) answer++;
}
return answer;
}
|| 는 많이 보고 써왔다. 하지만 | 는 존재하는건 알았지만 사용하기엔 생소하기에 찾아봤다.
| (비트 OR 연산자):
이 연산자는 정수형 데이터의 각 비트에 대해 OR(논리합)을 수행합니다.
예를 들어, a | b는 a와 b의 각 비트에 대해 OR 연산을 수행합니다.
|| (논리 OR 연산자):
이 연산자는 논리적인 OR(논리합)를 나타냅니다.
예를 들어, x || y는 x 또는 y 중 하나가 true이면 전체가 true가 됩니다.