본문 바로가기

Algorithm/Implementation

(C++) - 백준(BOJ) 4659 : 비밀번호 발음하기

반응형

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();
    }

}