https://www.acmicpc.net/problem/4659
4659번: 비밀번호 발음하기
좋은 패스워드를 만드는것은 어려운 일이다. 대부분의 사용자들은 buddy처럼 발음하기 좋고 기억하기 쉬운 패스워드를 원하나, 이런 패스워드들은 보안의 문제가 발생한다. 어떤 사이트들은 xvtp
www.acmicpc.net
풀이 :
- 문제에서 요구하는 그대로 조건을 걸어주면 된다
- 모음이 등장하는지, 모음이나 자음이 3 이상 연속으로 나오지는 않는지,
같은 알파벳이 2번 나오는데 그게 e와o가 아닌지
- 전부 조건을 걸어주고 잘 통과했다면 acceptable을, 그렇지 않다면 not acceptable을 출력
코드 :
#include <iostream>
#include <algorithm>
#include <string>
using namespace std;
int main(){
cin.tie(NULL);
ios::sync_with_stdio(false);
int v_cnt, c_cnt;
string s;
bool vowel, res;
while(1){ //end 나오기 전까지 무한 반복
cin >> s;
v_cnt = c_cnt = 0; //모든 문자열에 대해 검사해야 하기 때문에 초기화 필요
res = true;
vowel = false;
if(s == "end"){ //end가 나오면 종료
break;
}
for(int i=0; i<s.size(); i++){
if((s[i] == 'a') || (s[i] == 'e') || (s[i] == 'i') ||
(s[i] == 'o') || (s[i] == 'u')){ //모음이 나왔다면
vowel = true; //모음 등장 여부 체크
v_cnt++; //모음 카운트
c_cnt = 0; //자음 카운트 초기화
}else{ //자음이 나왔다면
c_cnt++; //자음 카운트
v_cnt = 0; //모음 카운트 초기화
}
if(i > 0 && (s[i] == s[i-1]) && ((s[i] != 'e') && (s[i] != 'o'))){
res = false; //같은 문자가 2번 나왔는데 e와 o가 아니라면 false 체크하고 종료
break;
}
if((c_cnt > 2) || (v_cnt > 2)){ //모음이나 자음이 3이상 연속으로 나온다면
res = false; //false 체크하고 종료
break;
}
}
if(!vowel){ //모음이 등장한 적이 없다면 false
res = false;
}
if(res){ //조건에 부합한다면
cout << '<' << s << '>' << " is acceptable.\n";
}else{
cout << '<' << s << '>' << " is not acceptable.\n";
}
}
}
'PS_Baekjoon' 카테고리의 다른 글
[백준 C++] 25372번 : 올바른 비밀번호 (0) | 2023.04.14 |
---|---|
[백준 C++] 15719번 : 중복된 숫자 (1) | 2023.04.13 |
[백준 C++] 14912번 : 숫자 빈도수 (0) | 2023.04.11 |
[백준 C++] 15904번 : UCPC는 무엇의 약자일까? (0) | 2023.04.09 |
[백준 C++] 10826번 : 피보나치 수 4 (0) | 2023.04.08 |