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

subbni·2023년 1월 19일
0

프로그래머스

목록 보기
3/23
post-thumbnail

문제

나의 풀이

정말 정석적으로 생각했다.

  • 각 String을 돈다
    - index의 char을 확인한다. 이전 문자와 같은 문자라면 break; (같은 발음이 연속될 수 없으므로)
    • a/y/u/m 네 문자 중 하나인지 확인하고, 그 외 문자일 시 break;
    • 네 문자 중 하나라면, 허용되는 단어인지 확인한다.
    • 허용되는 단어와 동일하다면, index와 prev를 처리하여 계속해서 확인한다.
  • 각 String이 모두 허용되는 문자들, 규칙들로 이루어져 있다면 (index == String의 길이) answer를 1 늘린다.
import java.util.HashMap;
class Solution {
     public int solution(String[] babbling) {
        HashMap<Character,String> words = new HashMap<>() {{
            put('a',"aya");
            put('y',"ye");
            put('w',"woo");
            put('m',"ma");
        }};
        int answer = 0;

        for(String s: babbling) {
            char prev='\u0000';
            int i=0;
            for(;i<s.length();) {
                if(prev==s.charAt(i)) break;
                String word = words.getOrDefault(s.charAt(i),"");
                if(word.equals("")) break;
                String curStr = s.substring(i,Math.min(s.length(),i+word.length()));

                if(curStr.equals(word)) {
                    prev = s.charAt(i);
                    i+= word.length();
                } else break;
            }
            if(i==s.length()) answer++;
        }
        return answer;
    }
}

다른 풀이

class Solution {
    public int solution(String[] babblings) {
        // "aya", "ye", "woo", "ma" 4가지 발음만 가능
        int answer = 0;
        for(int i = 0; i < babblings.length; i++) {
            if(babblings[i].contains("ayaaya") || babblings[i].contains("yeye") || babblings[i].contains("woowoo") || babblings[i].contains("mama")) {
                continue;
            }

            babblings[i] = babblings[i].replace("aya", " ");
            babblings[i] = babblings[i].replace("ye", " ");
            babblings[i] = babblings[i].replace("woo", " ");
            babblings[i] = babblings[i].replace("ma", " ");
            babblings[i] = babblings[i].replace(" ", "");

            if(babblings[i].length()  == 0) answer++;

        }
        return answer;
    }
}

String의 replace() 메소드를 이용한 풀이이다.

  • 각 String을 순회한다.
    - 만약 연속된 같은 발음이 존재한다면 넘어간다.
    - 각 허용되는 문자들을 " "로 바꾼다.
    - " "를 ""로 바꾼다
    -> 만약 허용되는 문자들로만 이루어져 있다면 String은 ""이 되고, 길이가 0이 된다.
    -> String의 길이가 0이라면 answer를 늘린다.

후기

정석적으로 푸는 것도 분명 의미가 있지만, 다른 풀이처럼, 허용되는 문자들을 같은 문자로 치환하여 확인하는 것도 재밌고 좋은 풀이인 것 같다. 다음에 비슷한 문제를 만난다면 이렇게 풀어보는 것도 좋을 듯 하다.
소요시간 : 40분

profile
개발콩나물

0개의 댓글