프로그래머스 | 옹알이 (2) (Java)

mul·2023년 2월 12일
0

알고리즘

목록 보기
18/65
post-custom-banner

🔒 문제

프로그래머스 Lv.1 옹알이 (2)

🔑 해결

문자열 배열 babbling이 매개변수로 주어질 때, 머쓱이의 조카가 발음할 수 있는 단어의 개수를 return하는 solution 함수를 작성하는 문제이다.

처음엔 split을 사용해 발음할 수 있는 단어가 나오면 삭제하는 방식으로 구현하였으나, 연속해서 같은 발음을 하는 단어를 처리할 수 없기 때문에 다른 방식을 고안하였다.

babbling 배열에 주어진 단어가 발음할 수 있는 단어인지 판별하고, 발음할 수 있는 단어이면 answer에 +1을 하도록 하였다. 발음할 수 있는 단어인지는 boolean형을 return하는 pronunciation 함수를 만들어 판별하였다. 조카가 발음할 수 있는 단어를 첫번째 알파벳 대문자로 replace하여 같은 발음을 연속으로 발음하거나, 발음할 수 없는 단어가 있다면 false를 return하도록 하였다.

  1. for문을 돌려 babbling[i]가 발음할 수 있는 단어인지 pronunciation함수로 판별한다. 발음할 수 있는 단어이면 true를, 발음할 수 없는 단어이면 false를 return하도록 한다.
    1-1. 조카가 발음할 수 있는 단어 aya, ye, woo, ma가 매개변수로 받은 단어 str에 있다면 첫번째 알파벳 대문자로 replaceAll
    1-2. 치환된 str이 A/Y/W/M로만 이루어진 단어인지(조카가 발음할 수 있는 발음으로만 조합된 단어인지) 확인. str에 A/Y/W/M의 개수(count)를 세어 str.length와 같지 않다면, 조카가 발음할 수 없는 발음이 섞인 단어로 판별하고 false를 return.
    1-3. A/Y/W/M으로만 이루어진 str이 연속한 발음이 나오는지(str.charAt(i) == str.charAt(i+1)) 확인. 연속한 발음이 나온다면 false를 return.
    1-4. 위의 조건문을 모두 통과하였다면, 조카가 발음할 수 있는 발음의 조합으로 만들어진 단어로 판별하고 true를 return한다.
  2. return된 pron이 true라면 answer++

🔓 코드

class Solution {
    public int solution(String[] babbling) {
        int answer = 0;
        
        for (int i = 0; i < babbling.length; i++) {
			// 발음할 수 있는 단어인지 판별
        	boolean pron = pronunciation(babbling[i]);
        	// 발음할 수 있는 단어는 answer++
        	if (pron) {
        		answer++;
        	}
		}
        
        return answer;
    }
    
    private boolean pronunciation(String str) {
    	str = str.replaceAll("aya", "A");
    	str = str.replaceAll("ye", "Y");
    	str = str.replaceAll("woo", "W");
    	str = str.replaceAll("ma", "M");
    	
    	int count = 0;
    	char[] b = {'A', 'Y', 'W', 'M'};
    	for (int i = 0; i < str.length(); i++) {
    		for (int j = 0; j < b.length; j++) {
				if (str.charAt(i) == b[j]) {
					count++;
				}
			}
    	}
    	if (count != str.length()) {
    		return false;
    	}
    	
    	for (int i = 0; i < str.length() - 1; i++) {
			if (str.charAt(i) == str.charAt(i + 1)) { // 같은 발음 반복
				return false;
			}
		}
    	
    	return true;
    	
    }
}
post-custom-banner

0개의 댓글