프로그래밍/코딩테스트

코딩테스트 : 옹알이(1)

백사니 2025. 4. 20. 00:37
728x90
반응형

문제 설명
해당 문제는 "aya", "ye", "woo", "ma" 네 가지 단어를 조합해 만들어진 문자열인지 판별하고, 조카가 발음 가능한 단어의 개수를 구하는 문제이다.

 

핵심 방법
문자열에서 "aya", "ye", "woo", "ma" 중 하나로 시작하는지를 확인하고 제거한다.
모든 단어가 제거되어 문자열이 비어있다면 발음 가능한 단어로 인정한다.

 

find에 대한 자세한 내용은 아래 블로그에서 확인할 수 있다.

 

Find의 자료구조 별 시간 복잡도

find 함수는 컨테이너에서 특정 데이터를 찾아주는 함수로 해당 데이터의 iterator를 반환한다.find 함수는 컨테이너의 종류와 데이터 구조에 따라 시간 복잡도가 결정된다.Vector와 Dequevector와 deque에

jinho082008.tistory.com

 

#include <string>
#include <vector>
#include <algorithm>

using namespace std;

int solution(vector<string> babbling) {
    int answer = 0;

    // 조카가 발음할 수 있는 단어 리스트
    vector<string> babb = { "aya", "ye", "woo", "ma" };

    // 입력으로 들어온 모든 문자열을 확인
    for (string str : babbling)
    {
        bool isSpeak = true;      // 현재 단어를 계속 확인할 수 있는지 여부

        while (isSpeak)
        {
            isSpeak = false;      // 반복문 탈출 조건 초기화

            for (int i = 0; i < babb.size(); i++)  // 발음 가능한 4가지 단어를 순회
            {
                size_t index = str.find(babb[i]); // 현재 단어의 시작 부분에 발음 가능한 단어가 있는지 확인

                // 해당 단어가 맨 앞에 있는지 확인한다.
                if (index == 0)
                {
                    str.erase(0, babb[i].size()); // 단어를 제거
                    isSpeak = true;              // 다음 반복 진행
                    break;                       // 더 이상 다른 단어 확인하지 않고 반복문 재시작
                }
            }
        }

        if (str.empty())          // 모든 단어가 발음 가능한 조합으로 제거되었을 경우
            answer++;            // 발음 가능한 단어 개수 증가
    }

    return answer;
}
728x90
반응형