[프로그래머스] Level 0 옹알이

 

Level 0 중 가장 정답률이 낮길래 풀어봤다.

 

 

문제

태어난 지 6개월밖에 되지 않은 조카는 아직 "aya", "ye", "woo", "ma" 네 가지 발음을 최대 한 번씩 사용해 이어 붙인 발음밖에 하지 못 한다고 한다. 문자열 배열 babbling이 매개변수로 주어질 때, 조카가 발음할 수 있는 단어의 개수를 return하도록 메서드를 완성하라

 

 

 

 

 

나의 답안

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

        for (int i = 0; i < babbling.length; i++) {
            str = babbling[i];

            for (int j = 0; j < canSay.length; j++) {

                if (str.length() != 0 && str.contains(canSay[j])) {

                    if (str.equals(babbling[i])) {
                        str = babbling[i].replaceAll(canSay[j], "-");
                    } else {
                        str = str.replaceAll(canSay[j], "-");
                    }
                }
            }

            if (str.replaceAll("-", "").isEmpty()) {
                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].replace("aya", "1");         
            babbling[i] = babbling[i].replace("woo", "1");
            babbling[i] = babbling[i].replace("ye", "1");
            babbling[i] = babbling[i].replace("ma", "1");      //해당하는 문자열이 있으면 1로 변환
                                                                                    //replace → replaceFirst 로 변경해야함!
            babbling[i] = babbling[i].replace("1", "");         //1을 제거
            if(babbling[i].isEmpty()) {      
                answer = answer + 1;
            }
        }

        return answer;
    }
}

 

  • 불필요하게 canSay배열 및 Babbling의 각 항목을 넣기 위한 문자열 변수(str)를 선언하지 않음 (성능, 가독성 ↑)
  • for문을 1번만 사용함
  • 단, "ayaaya"와 같은 중복이 발생해도 카운트가 된다. 따라서 replace() 대신 첫번째 해당문자만 변경해주는 replaceFirst()를 사용해야 한다!

 

복습

  • 배열의 길이 확인 :  arr.length      [괄호 사용 X]
  • 문자열의 일부를 다른 문자로 변환 :  String.replace("기존문자", "바꿀문자")
  • 문자열에 특정 문자가 포함되는지 확인 :  String.contains("문자")
  • 두 값이 같은지 확인 :  "문자".equals("문자")