종강하고 너무 오랜만에 다시 푸는 알고리즘!! 

다 까먹었지만 다시 처음부터 풀어봅시다~~~

 

문제 설명

"aya", "ye", "woo", "ma" 네 가지 발음을 최대 한 번씩만 사용한 발음밖에 하지 못하는 조카가 발음할 수 있는 단어의 개수를 return

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

 

문제 풀이법

우선 발음 가능한 단어들을 배열로 담아둔다

 

babbling[i]에서 발음이 가능한 단어의 총 길이 수를 담기 위한 변수 len 선언

babbling[i]의 총 길이인 변수 total_size 선언

발음은 최대 한 번씩만 사용 가능하니, 각 발음에 대하여 몇 번 사용했는지 알 수 있는 배열 used[4] 선언 해준다

 

이중 for문을 돌면서 발음이 가능한 단어가 쓰였는지, 그리고 babbling[i] 안에서 발음이 가능한 단어가 있는지 확인한다

babbling[i]안에 발음이 가능한 단어가 있다면, len에 발음 가능한 단어의 크기를 더해주고  babbing[i]에서 확인된 단어를 0으로 치환한다

이때 0으로 치환하지 않고 erase를 사용해 삭제처리를 한다면

"wyeoo"인 경우 원래는 발음이 안되는 단어이지만, 해당 문자열에 들어있는 "ye"를 삭제한다면 남아있는 문자열이 "woo"가 되기에 발음할 수 있는 단어로 처리가 된다

따라서 이를 방지하기 위해 0같은 발음가능한 단어에서 절대 등장하지 않는 문자로 치환해준다

 

모든 for문을 다 돌았다면 본래 babbling[i]의 크기와 발음 가능한 단어들의 길이를 비교하여 크기가 같다면 awswer에 1을 더해준다

 

 

소스 코드

#include <string>
#include <vector>

using namespace std;

int solution(vector<string> babbling) {
    int answer = 0;
    string str[4] = {"aya", "ye", "woo", "ma"};
    
    for (string tmp : babbling) {
        int len = 0;
        int total_size = tmp.size();
        int used[4] = {0, 0, 0, 0};
        
        for (int j = 0; j < 4; j++) {
            for (int i = 0; i < 4; i++) {
                if (used[i] == 0) {
                    int index = tmp.find(str[i], 0);

                    if (index < tmp.size()) {
                        tmp.replace(index, str[i].size(), "0");
                        len += str[i].size();
                        used[i] = 1;
                    }
                }
            }
        }

        if (len == total_size)
            answer++;
    }
    return answer;
}
복사했습니다!