[프로그래머스 입문] 옹알이(1)_JAVA

피용희·2024년 6월 7일
0

입문이래서 쉬울줄 알았더니만....생각보다 애를 먹었던 문제이다.
일단 백준이랑 입력 받는 형식이 달라서(백준은 테케 입력 받는걸 만들어야 하는데, 프로그래머스는 함수만 구현하는 방식이라 어떻게 접근해야 할까 좀 헤맸다.) 적응하는게 중요할 것 같다.

문제

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

접근 방법

입출력 예시

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

처음에는 contains 하고 있을 경우. replace하는 방식을 사용했으나, 이렇게 할 경우 다음의 문제가 존재한다.

wyeoo는 ye를 가지고 있으므로, 우선 이걸 공백으로 바꾼다. -> woo만 남음
woo는 발음할 수 있으므로 공백으로 바꾼다. -> ""
결국 wyeoo도 count 된다는건데,,,

중요한건 w | ye | oo 로 잘리기 때문에, 카운트가 안 되어야 한다는 것이다.
즉, woyeo, wyeoo는 replace만 단순히 사용하면 count될 위험이 있다.

  • 그래서 나의 경우는, 우선 "|"과 같은 가림막으로 replace 한 다음에,
    마지막에 가림막을 없앴을 때, 공백이 나오는지를 기준으로 체크하는 방식을 사용했다.
  • 이렇게 하면 wyeoo -> w|oo -> woo가 되어, count 되지 않도록 조정하는 것이 가능하다.

풀이

class Solution {
    public int solution(String[] babbling) {
        int answer = 0;

        String[] talk = {"aya", "ye", "woo", "ma"}; 

        for (String st : babbling) {
            for (String word : talk) {
                st = st.replace(word, "|");
            }
            st = st.replace("|", ""); //선 없애주기

            if(st == ""){
                answer++;
            }
        }
        return answer;
    }
}

결과

profile
코린이

0개의 댓글

관련 채용 정보