
내가 작성한 코드
class Solution {
public int solution(String[] babbling) {
String[] words = {"aya", "ye", "woo", "ma"}; // 말할 수 있는 단어
int answer = 0;
for (int i = 0; i < babbling.length; i++) {
for (int j = 0; j < words.length; j++) {
// 말할 수 있는 단어가 포함되어 있으면 공백으로 치환
// 공백으로 치환하는 이유 >> wyeoo와 같이 두 단어가 합쳐진 경우를 방지(ye가 사라지며 woo가 되서 정답처리 됨)
if (babbling[i].contains(words[j])) {
babbling[i] = babbling[i].replace(words[j], " ");
}
// 공백을 제외한 문자열의 길이가 0이면 정답 카운드 증가
if (babbling[i].trim().length() == 0) {
answer++;
break;
}
}
}
return answer;
}
}
다른 사람의 코드
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(?!aya)|ye(?!ye)|woo(?!woo)|ma(?!ma))+$
^
: 문자열의 시작을 의미
(aya(?!aya)|ye(?!ye)|woo(?!woo)|ma(?!ma))
aya
,ye
,woo
,ma
중 하나와 일치하는 부분을 찾음(?!aya)
,(?!ye)
,(?!woo)
,(?!ma)
- 부정형 전방탐색(negative lookahead)
- 즉,
aya
,ye
,woo
,ma
가 연속해서 반복되는 것을 허용하지 않음
+
: 위에서 찾은 패턴이 한 번 이상 반복될 수 있도록 허용
$
: 문자열의 끝을 의미
Share article