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

다곰·2023년 1월 4일
0

우당탕탕 코테준비

목록 보기
25/98

✅ LV.1

✏️ 솔루션

  1. 4가지 옹알이 단위로 잘라서 옹알이 조합으로만 구성되어 있는지 확인
  2. 한가지 옹알이를 포함한다고 판단하면 해당 옹알이 visit 표시해서 동일한 옹알이가 반복되는지 판단
    ➡️ visit 표시 하기 이전에 visit 배열을 모두 false 로 초기화해서 지금 포함한 옹알이만 true 표시
  3. 옹알이 포함한다고 판단하면 해당 부분을 문자열에서 지워주기
  4. 문자열이 빈 문자열이 되면 옹알이 조합으로만 이뤄진 문자열이라고 판단해서 true return
  5. 아닐 경우, 더 조합될 수 있기 때문에 재귀

✏️ 개선 솔루션

flag 변수로 앞서 등장한 옹알이 표시 ➡️ 방문 표시 기능
j ➡️ 4가지 옹알이에 해당하지 않는 경우, false 표시하고 break 해서 옹알이 count
0번 인덱스부터 옹알이 문자열의 마지막 인덱스까지 이동하면서 탐색하기
1. 4가지 옹알이에 대해 if-else 문으로 앞서 방문하지 않았고 substr 로 문자열을 잘랐을 때 해당 옹알이라면 방문표시하고 탐색 인덱스를 해당 옹알이 길이 다음으로 옮겨줌 ➡️ out of range 방지
2. 4가지 옹알이에 해당하지 않는 경우, jfalse 표시하고 break 해서 j 값이 true 이면 answer++ 해서 옹알이 count

📌 self feedback

code가 일관성 없고 난잡하고 배열 초기화도 너무 빈번함

✏️ code

#include <string>
#include <vector>

using namespace std;

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

    for(string s : babbling)
    {
        int flag=0; bool j=true;
        for(int i=0; i<s.length(); i++)
        {
            if(s.substr(i,3)=="aya" && flag!=1) { flag=1; i+=2; }
            else if(s.substr(i,2)=="ma" && flag!=2) { flag=2; i+=1; }
            else if(s.substr(i,3)=="woo" & flag!=3) { flag=3; i+=2; }
            else if(s.substr(i,2)=="ye" && flag!=4) { flag=4; i+=1; }
            else { j=false; break; }
        }
        if(j==true) answer++;
    }

    return answer;
}
profile
다교미의 불꽃 에러 정복기

0개의 댓글