문제풀이/백준oj

[백준OJ] 4659번 비밀번호 발음하기

Hyeon-Uk 2021. 7. 23. 12:15
반응형

https://www.acmicpc.net/problem/4659

 

4659번: 비밀번호 발음하기

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

www.acmicpc.net


 

-풀이-

모음인지 검사해주는 isVowels를 선언해준다.

bool isVowels(char a){
    if(a=='a'||a=='e'||a=='i'||a=='o'||a=='u'){
        return true;
    }
    else{
        return false;
    }
}

 

그런뒤, 조건에 맞춰서 검사를 해주면 된다. 사실 구현문제라 풀이를 해줄것이 없다.

 

-시간복잡도-

문자열의 길이를 S, 테스트 케이스의 개수를 T라하면 O(ST)가 된다.

 

-코드-

#include <algorithm>
#include<iostream>
#include<string>
using namespace std;

bool isVowels(char a){
    if(a=='a'||a=='e'||a=='i'||a=='o'||a=='u'){
        return true;
    }
    else{
        return false;
    }
}

bool isAcceptable(string st){
    int vowels=0;
    int sequenceV=0;
    int sequenceC=0;
        
    for(int i=0;i<st.size();i++){
        //모음의 개수를 세어주고 , 모음이 연속 3개면 false
        if(isVowels(st[i])){
            vowels++;
            sequenceV++;
            sequenceC=0;
            if(sequenceV==3){
                return false;
            }
        }
        //자음의 개수를 세어주고, 자음이 연속 3개면 false
        else{
            sequenceV=0;
            sequenceC++;
            if(sequenceC==3){
                return false;
            }
        }
        
        //e 와 o 를 제외한 연속된 2개 단어면 false
        if(i!=0){
            if(st[i]==st[i-1]&&st[i]!='e'&&st[i]!='o'){
                return false;
            }
        }
    }
    if(vowels==0) return false;//모음이 0개면 false
    
    return true;
}

int main(){
    cin.tie(NULL); cout.tie(NULL); ios_base::sync_with_stdio(false);
    while(true){
        string st;
        cin>>st;
        if(st=="end") break;
        
        if(isAcceptable(st)){
            cout<<"<"<<st<<"> is acceptable.\n";
        }
        else{
            cout<<"<"<<st<<"> is not acceptable.\n";
        }
       
    }
}
반응형