알고리즘/프로그래머스 1단계

프로그래머스 - 옹알이 - C++

게임만드는학생 2023. 9. 16. 21:54

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

 

프로그래머스

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

programmers.co.kr

 

#include <string>
#include <vector>

using namespace std;

int solution(vector<string> babbling) {
    int answer = 0;
   
    for(int i=0;i<babbling.size();i++)
    {
        string a="";
        bool ch=false;
        
        for(int j=0;j<babbling[i].length();j++)
        {
            a+=babbling[i][j];
            if(a.length()==2)
            {
                if(a!="ye"&&a!="ma")
                {
                    ch=false;
                }
                else
                {
                    a="";
                    ch=true;
                }
            }
            if(a.length()==3)
            {
                if(a!="aya"&&a!="woo")
                {
                    ch=false;
                    break;
                }
                else
                {
                    ch=true;
                    a="";
                }
            }
        }
        if(a.length()!=0)
        {
            if(a=="aya"||a=="ye"||a=="woo"||a=="ma")
                ch=true;
            else
                ch=false;
        }
        
        if(ch==true)
            answer++;
    }
    
    return answer;
}

 

설명

이 문제는 주어진 4개의 문자열("aya", "ye", "woo", "ma")로만 babbling의 문자열들이 이루어져 있는지 파악하고 

4개의 문자열로만 이루어진 문자열이 몇개인지를 리턴하는 문제이다. 

 

먼저 맨 바깥 for문은 babbling의 문자열을 하나씩 보기위한 for문이다. 

 

그리고 두 번째 for문으로 babbling의 i 번째 문자열을 문자 하나씩 보기 위한 반복문이다. 

string a="";
bool ch=false;
        
for(int j=0;j<babbling[i].length();j++)

 

babbling[i] 문자열의 j 번째 문자를 a 문자열에 더한다.

a+=babbling[i][j];

 

그리고 길이가 2일때와 3일때를 비교하여 주어진 문자열에 해당하는지를 판단하여

아닌 것이 있다하면 그 문자열은 주어진 4개의 문자열로만 이루어진 것이 아니기 때문에 바로

다음 babbling의 문자열로 넘어간다. 

if(a.length()==2)
{
	if(a!="ye"&&a!="ma")
    {
    	ch=false;
    }
    else
    {
        a="";
        ch=true;
    }
if(a.length()==3)
            {
                if(a!="aya"&&a!="woo")
                {
                    ch=false;
                    break;
                }
                else
                {
                    ch=true;
                    a="";
                }
            }

만약 맞으면 ch 변수를 true로 바꿔주고 a를 초기화한다. 

 

for문이 종료했을 때 만약 ch가 true라면 주어진 4개의 문자열로만 이루어졌다고 판단할 수 있다.

따라서

 if(ch==true)
            answer++;

이렇게 answer를 1 증가시킨다. 

 

이 때, 증가 전에 예외가 있다면 2,3을 판단하기 전에 for문이 끝나는 경우다. 

if(a.length()!=0)
        {
            if(a=="aya"||a=="ye"||a=="woo"||a=="ma")
                ch=true;
            else
                ch=false;
        }

때문에 위와 같이 다시 한 번 4개의 문자열로 이루어져 있는지 확인하고 ch를 업데이트 한다.