Make Unreal REAL.
article thumbnail
Level 1. 옹알이 (2)

 

 

정규 표현식을 이용하여 해결했다.

 

각 단어를 숫자 하나로 교체한다.

교체된 숫자가 없으면 발음이 불가능한 단어다.

 

남은 알파벳을 제거한다.

제거된 알파벳이 있으면 발음이 불가능한 단어다.

 

연속된 숫자를 제거한다.

연속된 숫자가 있으면 발음이 불가능한 단어다.

 

#include <iostream>
#include <vector>
#include <unordered_map>
#include <regex>
#include <algorithm>

using namespace std;

int solution(vector<string> babbling)
{
    int answer = 0;
    unordered_map<string, string> words{{"aya", "0"}, {"ye", "1"}, {"woo", "2"}, {"ma", "3"}};

    for (string s : babbling)
    {
        size_t length = s.length();

        for (pair<string, string> pr : words)
            s = regex_replace(s, regex(pr.first), pr.second);

        if (length == s.length())
            continue;

        length = s.length();
        s = regex_replace(s, regex("[a-z]"), "");

        if (length != s.length())
            continue;

        length = s.length();
        s.erase(unique(s.begin(), s.end()), s.end());

        if (length != s.length())
            continue;

        ++answer;
    }

    return answer;
}

 

첫 번째 방법은 시간이 꽤 걸려 다른 방법을 찾아봤다.

 

인덱스를 계산하고 각 단어에 대응하는 flag를 저장해 해결한 풀이가 있었다.

 

사실 이 풀이로 풀려다가 정규 표현식을 연습하고 싶어서 첫 번째 풀이로 풀었다.

 

#include <iostream>
#include <vector>

using namespace std;

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

    for (string s : babbling)
    {
        char flag = '\0';
        bool isPronounceable = true;
        size_t length = s.length();

        for (int i = 0; i < length; ++i)
        {
            if (s.substr(i, 3) == "aya" && flag != 'a')
                flag = 'a', i += 2;
            else if (s.substr(i, 2) == "ma" && flag != 'm')
                flag = 'm', i += 1;
            else if (s.substr(i, 3) == "woo" && flag != 'w')
                flag = 'w', i += 2;
            else if (s.substr(i, 2) == "ye" && flag != 'y')
                flag = 'y', i += 1;
            else {
                isPronounceable = false; break; }
        }

        if (isPronounceable)
            ++answer;
    }

    return answer;
}

'자료구조 & 알고리즘 > 프로그래머스' 카테고리의 다른 글

Level 1. 실패율  (0) 2023.02.23
Level 1. 카드 뭉치  (0) 2023.02.22
Level 1. 명예의 전당 (1)  (0) 2023.02.20
Level 1. 완주하지 못한 선수  (0) 2023.02.19
Level 1. 과일 장수  (0) 2023.02.18
profile

Make Unreal REAL.

@diesuki4

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!

검색 태그