코딩테스트

[프로그래머스] 옹알이2

코딩너구리 2024. 8. 12. 18:01

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

 

프로그래머스

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

programmers.co.kr

문제 설명
머쓱이는 태어난 지 11개월 된 조카를 돌보고 있습니다. 조카는 아직 "aya", "ye", "woo", "ma" 네 가지 발음과 네 가지 발음을 조합해서 만들 수 있는 발음밖에 하지 못하고 연속해서 같은 발음을 하는 것을 어려워합니다. 문자열 배열 babbling이 매개변수로 주어질 때, 머쓱이의 조카가 발음할 수 있는 단어의 개수를 return하도록 solution 함수를 완성해주세요.

제한사항
1 ≤ babbling의 길이 ≤ 1001 ≤ babbling[i]의 길이 ≤ 30문자열은 알파벳 소문자로만 이루어져 있습니다.

 

string에서 활용할 수 있는 방법들을 생각해보았고, 0번째 인덱스를 기준으로 단어를 검색해서 다른단어가 존재하면 지우고, 그렇지 않다면 문자열을 남긴다. 그 후 문자열이 남아 있지 않다면 말할 수 있는 단어이기에 수를 더해준다.

 

#include <string>
#include <vector>
#include <iostream>

using namespace std;

string CheckFirst(string babbling, char key) {
    switch (key) {
        case 'a': {
            return "aya";
        }
        case 'y': {
            return "ye";
        }
        case 'w': {
            return "woo";
        }
        case 'm': {
            return "ma";
        }
    }

    return "";
}

bool Continue(string babbling, string key) {

    int index = babbling.find(key);

    if (babbling.find(key, index + key.size()) == index + key.size()) {
        return true;
    }

    return false;

}

int solution(vector < string > babbling) {

    int answer = 0;

    for (int i = 0; i < babbling.size(); i++) {
        string key = CheckFirst(babbling[i], babbling[i][0]);
        while (babbling[i].find(key) != string::npos) {

            if (false == Continue(babbling[i], key)) {
                int index = babbling[i].find(key);
                babbling[i].replace(babbling[i].find(key), key.size(), "");
                key = CheckFirst(babbling[i], babbling[i][0]);
            } else {
                break;
            }
        }

        if (babbling[i].size() == 0) {
            answer++;
        }



    }

    return answer;
}

 

fort문을 이용하는 방법보다 스위치 문을 통해 0번째 단어가 무엇인지 판별해 가져오게 한다.

그리고 연속된 숫자인지 여부를 검사하는 검사하는 과정이 추가로 필요하다.