Programmers Review

[Lv 1] 옹알이 (2)

hanseongbugi 2024. 6. 8. 15:30

https://school.programmers.co.kr/learn/courses/30/lessons/133499

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

문제에 주어진 배열 속 문자열 중 4가지 경우에 해당하면 말할 수 있는 단어로 판단해야한다.

이때 같은 단어가 2번 연속으로 나오면 안된다. 또한 말할 수 있는 단어 이후에 이상한 단어가 나오면 말할 수 없는 단어로 판단한다.

 

이를 위해 처음 문자열에서 단어를 기준으로 문자열을 잘라 배열에 삽입하였다.

이후 배열을 순회하며 같은 단어가 연속으로 나오는지 판단한다.

또한 말할 수 있는 단어가 있다면 말할 수 있는 단어 수를 증가시킨다.

 

#include <string>
#include <vector>

using namespace std;

bool babblingTest(string str){
    if(str == "aya" || str == "ye" || str == "woo" || str == "ma")
        return true;
    else
        return false;
}

int solution(vector<string> babbling) {
    int answer = 0;
    for(int i = 0;i<babbling.size();i++){
        string word = babbling[i];
        string temp = "";
        vector<string> words;
        for(int j = 0;j<word.length();j++){
            temp += word[j]; 
            if(babblingTest(temp)){
                words.push_back(temp);
                temp = "";
            }
        }
        if(!temp.empty())
            words.push_back(temp);
        string before = "";
        bool isSpeak = false;
        for(int j = 0;j<words.size();j++){
            if(babblingTest(words[j])){
                if(!before.empty() && words[j] == before){
                    isSpeak = false;
                    break;
                }
                isSpeak = true;
                before = words[j];
            }
            else{
                isSpeak = false;
                break;
            }
        }
        if(isSpeak)
            answer++;
    }
    return answer;
}