프로그래머스/lv1/133499. 옹알이(2)

SITY·2023년 9월 22일
0

Cpp_Algorithm

목록 보기
10/43

#include <string>
#include <vector>
#include <algorithm>
using namespace std;

bool containsOnlySpace(string str) {
    return all_of(str.begin(), str.end(), ::isspace);
}

int solution(vector<string> babbling) {
    int find = 0, npos = 0, answer = 0;
    string v[4] = {"aya", "ye", "woo", "ma"};
    for (int i = 0; i < babbling.size(); i++) {
        string temp = babbling[i];
        int j = 30, k = 0;
        while (j--) {
            npos = temp.find(v[k]);
            if (npos != string::npos) {
                temp.replace(npos, v[k].size(), " ");
                if (temp.find(v[k]) == npos + 1) {
                    break;
                }
            }
            k = (k + 1) % 4;
        }
        if (containsOnlySpace(temp)) answer++;
    }
    return answer;
}

파라미터로 받은 vector의 크기만큼 for문을 돌고 가능한 발음을 찾기위해 v에 있는 가능한 모든 발음을 찾아서 지워준다. 옹알이 (1) 에서는 발음을 한번씩 조합해서 가능한 것을 찾는 문제였는데, 옹알이 (2)에서는 발음을 여러번 조합하되, 연속 발음이 가능하지 않기에 만약 지운 인덱스 다음에 또 같은 인덱스가 있다면 한번 더 지웠다.

그리고 가능한 발음들을 지운 temp 문자열이 공백만 존재한다면 answer의 값을 올린다. while문을 많이 돌지 않고 조건문에서 or연산자를 활용했어도 괜찮았을 것 같다 .

이전에 풀었던 문제와 유사한 알고리즘으로 풀려고 해서 조금 난잡하게 풀은 감이 없지않아 있다..
다음부터 비슷한 유형이 나온다면 이전에 풀었던 방식을 고집하지 않고 새로운 방식으로 쉽게 푸는 방법을 찾아야겠다.

profile
·ᴗ·

0개의 댓글