본문 바로가기

코딩테스트/프로그래머스

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

728x90
반응형


🔗 문제 링크

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

 

프로그래머스

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

programmers.co.kr


👩‍💻 코드

#include <string>
#include <vector>

using namespace std;

int solution(vector<string> babbling) {
    int answer = 0;
    vector<string> validWorlds = {"aya", "ye", "woo", "ma"};
    
    for(int i=0; i<babbling.size(); i++){
        string preWorld = "";
        bool isVaild = true;
        for(int j=0; j<babbling[i].size();){
            bool found = false;
            for(int k=0; k<validWorlds.size(); k++){
                int length = validWorlds[k].size();
                
                // validWorlds에 포함되는 단어인지 확인
                if (j+length <= babbling[i].size() && babbling[i].substr(j, length) == validWorlds[k]){
                    if(validWorlds[k] == preWorld){ // 포함되지만 연속된 경우
                        isVaild = false;
                        break;
                    }
                    
                    // 포함된 단어일 경우
                    preWorld = validWorlds[k];
                    j += length;
                    found = true;
                    break;
                }
            }
            
            // 포함되지 않는 단어일 경우
            if(!found){
                isVaild = false;
                break;
            }
        }
        
        if(isVaild){
            answer++;
        }
    }
    
    return answer;
}

📝 풀이

문제에서 체크해야 할 핵심 포인트 두가지는 다음과 같다.

  • 네 가지 발음으로만 이루어져 있는가
  • 연속되지 않는가

네 가지 발음은 vector로 선언했고 주어진 babbling vector의 첫 단어부터 네 가지 발음으로만 이루어져 있는지 확인했다.

네 가지 발음으로 이루어져 있으면 found를 true로 만들었고, 연속된 경우는 isVaild를 false로 만들었다.

단어가 끝날 때까지 found가 false인 경우(유효하지 않은 발음을 포함한 경우)에도 isVaild를 false로 만들었다.

최종적으로 네 가지 발음만 포함된 단어는 isVaild가 true인 경우로 answer의 값을 증가시켰다.

 

728x90
반응형