본문 바로가기

알고리즘

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

728x90

아기들이 특정 단어밖에 말할 수 없다는 점을 이용한 문제이다.

개인적으로 다른 사람 풀이 봤을 때, 이걸 정규식으로 푼 걸 보고 놀랬다...

 

JavaScript

- 함수를 일단 분리했고, 단어마다 check를 하도록 구성했다.

- 일단 말할 수 있는 단어가 나오면 @로 replace를 한 후, 마지막에 @를 빈 문자열로 만들어 애기가 말할 수 있는 단어인지 최종 판단한다.

function solution(babbling) {
    let count = 0;
    
    babbling.forEach((word) => {
        if (checkWord(word)) {
            count += 1;
        }
    })
    
    
    return count;
}

// Return Boolean
function checkWord(word) {
    const babyWords = ["aya", "ye", "woo", "ma"];
    
    babyWords.forEach((babyWord) => {
        word = word.replaceAll(babyWord, '@');
    })
    
    word = word.replaceAll('@', '');
    
    if (word.length == 0) {
        return true;
    }
    
    return false;
}

 

JAVA

- Set로 먼저 애기가 말할 수 있는 구조를 만든다.

- remain에 애기가 말할 수 있는 단어가 완성되면 prev에 집어놓고 초기화한다.

- remain이 결론적으로 빈 문자열이 되면, 애기가 말할 수 있다고 판단한다.

import java.util.HashSet;

class Solution {
    public int solution(String[] babbling) {
        int answer = 0;
        HashSet<String> set = new HashSet<String>();
        set.add("aya");
        set.add("ye");
        set.add("woo");
        set.add("ma");

        for (String word :
                babbling) {
            String prev = "";
            String remain = "";

            for (int i = 0; i < word.length(); i++) {
                remain += word.charAt(i);

                if (set.contains(remain)) {
                    if (remain == prev) break;
                    prev = remain;
                    remain = "";
                }
            }

            if (remain.equals("")) answer += 1;

        }

        return answer;
    }
}
300x250