[JAVA 문제 풀이] 82. 옹알이(1)

프로그래머스 (120956)
Stupefyee's avatar
Feb 12, 2025
[JAVA 문제 풀이] 82. 옹알이(1)
notion image

내가 작성한 코드

💡
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

stupefyee