[프로그래머스] 옹알이 (2) / Level 1 / Java

알재·2025년 3월 10일
0

코딩 테스트

목록 보기
62/68

링크

문제링크

문제

머쓱이는 태어난 지 11개월 된 조카를 돌보고 있습니다. 조카는 아직 "aya", "ye", "woo", "ma" 네 가지 발음과 네 가지 발음을 조합해서 만들 수 있는 발음밖에 하지 못하고 연속해서 같은 발음을 하는 것을 어려워합니다. 문자열 배열 babbling이 매개변수로 주어질 때, 머쓱이의 조카가 발음할 수 있는 단어의 개수를 return하도록 solution 함수를 완성해주세요.

제한사항

  • 1 ≤ babbling의 길이 ≤ 100
  • 1 ≤ babbling[i]의 길이 ≤ 30
  • 문자열은 알파벳 소문자로만 이루어져 있습니다.

입출력

babblingresult
["aya", "yee", "u", "maa"]1
["ayaye", "uuu", "yeye", "yemawoo", "ayaayaa"]2

해결

조카가 발음할 수 있는 말을 모아둔 babblingType 을 선언한다.

연속적으로 같은 발음을 할지 체크할 preType 을 선언하여 발음이 매칭되면 여기에 저장해 둔다.

babbling[i]babblingType과 비교하고 매치가 된다면 ""으로 치환한다.

babbling[i] 이 마지막에 ""으로 남게 된다면 발음 할 수 있는 단어로 판별한다.

다른 사람 풀이를 확인하니
연속으로 발음 하는경우인 ayaaya|yeye|woowoo|mama 를 체크해서 발음에 포함되지 않는 문자 "1"과 같은 것으로 치환하고
발음할수 있는 aya|ye|woo|ma""로 치환하는 로직으로 체크를 하여
이에 맞게 개선한 코드로 짜보았다.

코드

class Solution {
    public int solution(String[] babbling) {
        int answer = 0;
        String[] babblingType = {"aya", "ye", "woo", "ma"};

        for (int i = 0; i < babbling.length; i++) {
            String preType = "";
            boolean isMatch = true;

            while (isMatch) {
                isMatch = false;

                for (int j = 0; j < babblingType.length; j++) {
                    if (!preType.equals(babblingType[j]) 
                            && babbling[i].length() >= babblingType[j].length()  
                            && babbling[i].substring(0, babblingType[j].length()).equals(babblingType[j])) {
                        babbling[i] = babbling[i].replaceFirst(babblingType[j], "");
                        preType = babblingType[j];
                        isMatch = true;
                    }
                }
            }

            if (babbling[i].equals("")) answer++;
        }

        return answer;
    }
}
  • 개선 코드
class Solution {
    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", "");

            if (babbling[i].equals("")) answer++;
        }        
        
        return answer;
    }
}
profile
저장소

0개의 댓글