[프로그래머스] 옹알이 - JAVA

조유정·2023년 1월 18일
0

코딩테스트

목록 보기
1/31

[프로그래머스] 코딩테스트 연습 > 코딩테스트 입문 > 옹알이(1)

문제설명

머쓱이는 태어난 지 6개월 된 조카를 돌보고 있습니다. 조카는 아직 "aya", "ye", "woo", "ma" 네 가지 발음을 최대 한 번씩 사용해 조합한(이어 붙인) 발음밖에 하지 못합니다. 문자열 배열 babbling이 매개변수로 주어질 때, 머쓱이의 조카가 발음할 수 있는 단어의 개수를 return하도록 solution 함수를 완성해주세요.

제한사항

  • 1 ≤ babbling의 길이 ≤ 100
  • 1 ≤ babbling[i]의 길이 ≤ 15
  • babbling의 각 문자열에서 "aya", "ye", "woo", "ma"는 각각 최대 한 번씩만 등장합니다.
  • 즉, 각 문자열의 가능한 모든 부분 문자열 중에서 "aya", "ye", "woo", "ma"가 한 번씩만 등장합니다.
  • 문자열은 알파벳 소문자로만 이루어져 있습니다.

입출력 예

babblingresult
["aya", "yee", "u", "maa", "wyeoo"]1
["ayaye", "uuuma", "ye", "yemawoo", "ayaa"]3

풀이

babbling 단어에 replaceAll()을 사용하여 발음할 수 있는 단어를 모두 지우자!
모두 지우고도 남아있다면 발음할 수 없는 단어다!

코드

정규식 사용

class Solution {
    public int solution(String[] babbling) {
        int answer = 0;
        
		for (String bab : babbling) {
			bab = bab.replaceAll("aya|ye|woo|ma", "");

			if (bab.equals(""))
				answer++;
		}
        
        return answer;
    }
}

정규식 미사용

class Solution {
    public int solution(String[] babbling) {
        int answer = 0;
        
        String[] words = { "aya", "ye", "woo", "ma" };
		for (String bab : babbling) {
			for (String word : words) {
				bab = bab.replace(word, "-");
			}
			
			boolean check = true;
			for(int i=0; i<bab.length(); i++) {
				if(bab.charAt(i)!='-') {
					check = false;
					break;
				}
			}
			
			if(check)
				answer++;
		}
        
        return answer;
    }
}

정규식을 사용하지 않으면
발음할 수 있는 단어를 한 번에 지울 수 없다.

replace()를 사용하면 발음할 수 있는 단어를 하나하나씩 지우게 되는데
이러한 방식을 사용하면 중간 단계에서 발음할 수 있는 단어가 생길 수 있다.

그래서 단어를 지우는 게 아니라
단어를 다른 기호로 대체하는 방식으로 해결할 수 있다.

만약에 발음할 수 있는 단어가 엄청 많거나, 애초에 배열로 주어지면
정규식을 사용하지 않는 방법으로 풀어야 할 듯 싶다.

정규식을 알아두면
꽤 유용하게 써먹을 때가 많다.

profile
나는 아직 멍청하다

0개의 댓글