반응형
[문제 풀이]
1. 패스워드에 모음(a, e, i, o, u) 하나를 포함하는지 체크
2. 패스워드에 모음이 3개 혹은 자음이 3개 연속으로 오는지 체크
3. 패스워드에 같은 글자가 연속적으로 두번 오는지 체크 (ee, oo는 허용)
[코드]
- 패스워드에 모음(a, e, i, o, u) 하나를 포함하는지 체크하는 함수
bool firstCheck(string password){
bool flag = false;
int len = password.length();
for(int i=0; i<len; i++){
for(int j=0; j<5; j++){
if(password[i] == mo[j]){
flag = true;
break;
}
}
if(flag) break;
}
return flag;
}
- 패스워드에 모음이 3개 혹은 자음이 3개 연속으로 오는지 체크하는 함수
bool secondCheck(string password){
bool flag = true;
int len = password.length();
int cntMo = 0, cntJa = 0, check = 0;;
for(int i=0; i<len; i++){
string tmp = password.substr(i, 3);
cntMo = 0;
cntJa = 0;
for(int j=0; j<tmp.length(); j++){
check = 0;
for(int k=0; k<5; k++){
if(tmp[j] == mo[k]){
check = 1;
break;
}
}
if(check == 0){
cntJa++;
}else{
cntMo++;
}
}
if(cntMo == 3 || cntJa == 3){
flag = false;
break;
}
}
return flag;
}
- 패스워드에 같은 글자가 연속적으로 두번 오는지 체크하는 함수 (ee, oo는 허용)
bool thirdCheck(string password){
bool flag = true;
int len = password.length();
for(int i=0; i<len-1; i++){
if(password[i] == password[i+1]){
string tmp = password.substr(i, 2);
if(tmp != "oo" && tmp != "ee"){
flag = false;
break;
}
}
}
return flag;
}
[전체 코드]
#include <iostream>
#include <string>
using namespace std;
char mo[5] = {'a', 'e', 'i', 'o', 'u'};
bool firstCheck(string password){
bool flag = false;
int len = password.length();
for(int i=0; i<len; i++){
for(int j=0; j<5; j++){
if(password[i] == mo[j]){
flag = true;
break;
}
}
if(flag) break;
}
return flag;
}
bool secondCheck(string password){
bool flag = true;
int len = password.length();
int cntMo = 0, cntJa = 0, check = 0;;
for(int i=0; i<len; i++){
string tmp = password.substr(i, 3);
cntMo = 0;
cntJa = 0;
for(int j=0; j<tmp.length(); j++){
check = 0;
for(int k=0; k<5; k++){
if(tmp[j] == mo[k]){
check = 1;
break;
}
}
if(check == 0){
cntJa++;
}else{
cntMo++;
}
}
if(cntMo == 3 || cntJa == 3){
flag = false;
break;
}
}
return flag;
}
bool thirdCheck(string password){
bool flag = true;
int len = password.length();
for(int i=0; i<len-1; i++){
if(password[i] == password[i+1]){
string tmp = password.substr(i, 2);
if(tmp != "oo" && tmp != "ee"){
flag = false;
break;
}
}
}
return flag;
}
int main(){
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
string password;
while(true){
cin>>password;
if(password == "end") break;
if(firstCheck(password) && secondCheck(password) && thirdCheck(password)){
cout<<"<"<<password<<"> is acceptable."<<"\n";
}else{
cout<<"<"<<password<<"> is not acceptable."<<"\n";
}
}
}
https://www.acmicpc.net/problem/4659

반응형
'Algorithm > Baekjoon' 카테고리의 다른 글
| [ 백준 12789 ] 도키도키 간식드리미 (C++) (0) | 2025.01.26 |
|---|---|
| [ 백준 17266 ] 어두운 굴다리 (JAVA) (1) | 2025.01.13 |
| [ 백준 1937 ] 욕심쟁이 판다 (C++) (0) | 2024.12.30 |
| [ 백준 5046 ] 전국 대학생 프로그래밍 대회 동아리 연합 (C++) (0) | 2024.12.13 |
| [ 백준 2146 ] 다리 만들기 (C++) (0) | 2024.12.09 |