4659번: 비밀번호 발음하기 (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;
}
'Algorithm > boj' 카테고리의 다른 글
백준 17071 //bfs, flood fill, 완탐x (2) | 2023.05.11 |
---|---|
백준 2870 //vector<string>정렬은 커스텀으로, string토큰화 (0) | 2023.05.04 |
백준 2910 빈도정렬 // 커스텀정렬, 인덱스에 의미부여 (0) | 2023.05.03 |
백준 7562 // 최단거리는 bfs, 핵심로직공부 (0) | 2023.05.02 |
백준 11724 // 연결리스트 dfs, for문 1~n까지만 (0) | 2023.05.01 |