Lv 0. 옹알이 (1). *다시 풀어보기*

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

 

#include <string>
#include <vector>

using namespace std;

int solution(vector<string> babbling) {
    int answer = 0;
    for(int i=0; i<babbling.size(); i++){
        int len= babbling[i].size();
        bool pos=true;
        for(int j=0; j<len; j++){
            if(babbling[i][j]=='a'){ //"aya"
                if((j+2<len)&&babbling[i][j+1]=='y'&&babbling[i][j+2]=='a') {j+=2;}
                else{
                    pos = false;
                    break;
                }
            }
            else if(babbling[i][j]=='y'){ //"ye"
                if((j+1<len)&& babbling[i][j+1]=='e') {j++;}
                else{
                    pos = false;
                    break;
                }
            }
            else if(babbling[i][j]=='w'){ //"woo"
                if((j+2<len)&&babbling[i][j+1]=='o'&&babbling[i][j+2]=='o') {j+=2;}
                else{
                    pos = false;
                    break;
                }
            }
            else if(babbling[i][j]=='m'){ //"ma"
                if((j+1<len)&&babbling[i][j+1]=='a') {j++;}
                else{
                    pos = false;
                    break;
                }
            }
            else{ //그외 나머지.
                pos=false;
                break;
            }
        }
        if(pos) answer++;
    }
    return answer;
}

스트링에서 일일이 하나씩 보면서, 시작이 a y w m 인 경우, 각각이 aya, ye, woo, ma 인지 확인하고, 맞다면 글자 수만큼 넘어가서 다시 체크하는 식으로, 그리고 만약 a, y, w, m 로 시작했는데 해당 글자들이 아닌 경우이거나, 다른 글자로 시작한 경우들은 모두 단어가 불가능하다는 의미로 pos= false로 만들고 건너뛰는 형태로 작성하였다. 

 

다른 사람의 풀이를 보았을때, 정말 각양 각색의 풀이가 있는데, 이중에서 가장 위에 추천을 받은 풀이를 한번 첨부해보겠다. 

스트링에 대한 비교를 조금 더 간결하게 할 수 있는 방법으로 작성한 코드인데, 내가 한건 각각의 char 별로 판단하는것이라면, 이 코드의 경우는 string이 aya, ye, woo, ma 인지 확인하는 형태로 작성한 코드이다. 

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

using namespace std;

int solution(vector<string> babbling) {
    int answer = 0;
    string temp = "";
    string temp2 = "";
    for(int i =0; i<babbling.size(); i++)
    {
        string s = babbling[i];
        temp = "";
        temp2 = "";
        for(int i=0; i<s.size(); i++)
        {
            temp += s[i];
            if(temp == "aya" || temp == "ye" || temp == "woo" || temp == "ma")
            {
                if(temp == temp2)
                    break;
                else
                    temp2 = temp;
                temp = "";
            }
        }
         if(temp == "")
                answer++;
    }
    return answer;
}

이렇게 작성하면,

if(temp== temp2)

  break;

else 

  temp2=temp;

temp="";

형태를 통해서, 똑같은 단어가 한번 더 나오는 경우의 예외처리를 하는 부분도 존재하면서, 

주어진 글자를 개별적으로 temp에 담으면서 그 내용이 "aya" , "ye", "woo", "ma" 인지 string 끼리의 == 를 통해 비교하기 때문에

훨씬 코드를 간결하게 작성할 수 있다. 

아주 괜찮은 방법같다. 

다음에는 이와 같은 형태로 코드를 작성해보도록 하자. 이렇게 떠올려 보도록 하자. 

string 끼리는 == 을 통해서 같은지 아닌지 판별할 수 있다는것을 이해하고 사용해보도록 하자. 

 

  Comments,     Trackbacks