반응형
https://www.acmicpc.net/problem/4659
4659번: 비밀번호 발음하기
좋은 패스워드를 만드는것은 어려운 일이다. 대부분의 사용자들은 buddy처럼 발음하기 좋고 기억하기 쉬운 패스워드를 원하나, 이런 패스워드들은 보안의 문제가 발생한다. 어떤 사이트들은 xvtp
www.acmicpc.net
문제에 나온 조건대로 구현하는 문제였습니다.
📕 풀이방법
📔 입력 및 초기화
비밀번호 문자열 s, 모음을 저장하는 map vowelMap을 선언해 입력받습니다.
📔 풀이과정
조건 1,2,3을 확인하는 condition함수를 실행합니다.
* 조건 2를 수행할 때 자음이 나온다면 세었던 모음개수를 0으로 초기화해줘야하며 반대의 경우도 마찬가지입니다.
조건여부에 따라 정답 문자열을 반환하는 getString함수를 실행합니다.
📔 정답출력
형식에 맞게 출력합니다.
📕 Code
#include <bits/stdc++.h>
using namespace std;
map <char, int> vowelMap;
string s;
bool conditionOne(){
bool isVowel = false;
for(int i = 0; i < s.size(); i++)
if(vowelMap[s[i]])
isVowel = true;
return isVowel;
}
bool conditionTwo(){
int vowelCnt = 0, consonantCnt = 0;
for(int i = 0; i < s.size(); i++){
if(vowelMap[s[i]]) consonantCnt = 0, vowelCnt++;
else vowelCnt = 0, consonantCnt++;
if(vowelCnt == 3 || consonantCnt == 3) return false;
}
return true;
}
bool conditionThree(){
char prev = s[0];
for(int i = 1; i < s.size(); i++){
if(s[i] == prev && (s[i] != 'e' && s[i] != 'o')) return false;
prev = s[i];
}
return true;
}
string getString(){
bool isValid = conditionOne() && conditionTwo() && conditionThree();
if(isValid) return "acceptable.\n";
return "not acceptable.\n";
}
int main(){
vowelMap['a'] = 1, vowelMap['i'] = 1;
vowelMap['e'] = 1, vowelMap['o'] = 1, vowelMap['u'] = 1;
while(1){
cin >> s;
if(s == "end") break;
cout << '<' << s << '>' << " is " << getString();
}
}
'Algorithm > Implementation' 카테고리의 다른 글
(C++) - 백준(BOJ) 16171 : 나는 친구가 적다 (Small) (2) | 2022.04.15 |
---|---|
(C++) - 백준(BOJ) 14582 : 오늘도 졌다 (0) | 2022.04.12 |
(C++) - 백준(BOJ) 24883 : 자동완성 (0) | 2022.04.08 |
(C++) - 백준(BOJ) 13623 : Zero or One (0) | 2022.04.07 |
(C++) - 백준(BOJ) 20540 : 연길이의 이상형 (0) | 2022.03.23 |