관리 메뉴

Mini

백준 4659 // 문자열==비교가능 본문

Algorithm/boj

백준 4659 // 문자열==비교가능

Mini_96 2023. 5. 4. 14:15

4659번: 비밀번호 발음하기 (acmicpc.net)

 

4659번: 비밀번호 발음하기

좋은 패스워드를 만드는것은 어려운 일이다. 대부분의 사용자들은 buddy처럼 발음하기 좋고 기억하기 쉬운 패스워드를 원하나, 이런 패스워드들은 보안의 문제가 발생한다. 어떤 사이트들은 xvtp

www.acmicpc.net

※ 조건2,3은 글자수가 2글자, 3글자 이상일때만 검사해야함.

1.입력시, mp에 (idx,1(모음)2(자음)) 여부저장. => 조건3에서 검사쉽게.

 

#include<bits/stdc++.h>
using namespace std;
typedef long long int ll;
int n, c, a[1004];
map<int, int> mp;  //인덱스,모음(1)자음(2)
string s;


bool f(string s)
{
    if (s.find('a') == std::string::npos 
        && s.find('e') == std::string::npos
        && s.find('i') == std::string::npos
        && s.find('o') == std::string::npos
        && s.find('u') == std::string::npos)
    {
       // cout << "1번걸림\n";
        return false;
    }

    if(s.length()>=2)
    for (int i = 0; i < s.length() - 1; ++i)
    {
        if (s[i]==(s[i + 1]))
        {
            if (s[i] != 'e' && s[i] != 'o') 
            {
                //cout << "2번걸림\n"; 
                return false;
            }
        }
    }

    if (s.length() >= 3)
    for (int i = 0; i < mp.size()-2; ++i)
    {
        if (mp[i] == mp[i + 1] && mp[i] == mp[i + 2] && mp[i+1] == mp[i + 2])
        {
            //cout << "3번걸림\n";
            return false;
            
        }
    }
    return true;
}

int main() {
    ios_base::sync_with_stdio(0); 
    cin.tie(NULL); cout.tie(NULL);
    

    while (true)
    {
        cin >> s;
        if (s == "end") break;

        mp.clear();
        for (int i = 0; i < s.length(); ++i)
        {
            if (s[i] == 'a' || s[i] == 'e'
                || s[i] == 'i' || s[i] == 'o'
                || s[i] == 'u')
                mp[i] = 1;
            else
                mp[i] = 2;
        }
        if (f(s))
            cout << "<" << s << "> is acceptable.\n";
        else
            cout << "<" << s << "> is not acceptable.\n";
    }
    
    return 0;
}