Patrick's Devlog

[BOJ/C++] 비밀번호 발음하기(4659번) 본문

Algorithm/Algorithms Practice

[BOJ/C++] 비밀번호 발음하기(4659번)

Patrick_ 2022. 11. 16. 15:02

1. 개요

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

 

4659번: 비밀번호 발음하기

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

www.acmicpc.net

1-1. 설명

발음이 가능한 패스워드를 만드는 회사가 존재한다. 적당히 외우기 쉬우면서 안전하게 계정을 지킬 수 있는 비밀번호를 생성하기 위해 계획중이다. 높은 품질을 지닌 비밀번호 조건에 맞추어 비밀번호가 입력되었을 때, 높은 품질인지 확인하는 프로그램을 작성한다. 

1-2. 제한 사항

 - 여러개의 테스트 케이스로 이루어져 잇으며, 각 줄에 테스트할 패스워드가 주어짐

 - 마지막 테스트 케이스는 end이며, 패스워드는 한글자 이상 20 글자 이하 문자열

2. 구현

2-1. 풀이

패스워드 입력을 받아 조건에 알맞게 코드를 구현하였다. 그리고 알맞은 비밀번호이면 acceptable을 출력하고, 알맞지 않은 비밀번호이면 not acceptable을 출력하게 하였다. 

2-2. 코드

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

string result[2] = { " is acceptable.", " is not acceptable." };
char vowels[5] = { 'a', 'e', 'i', 'o', 'u' };

int main()
{
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);

    string input;
    int vowelCnt, consCnt; // 모음, 자음 count
    int resultNum, idx;
    bool vowelFlag;
    char preCh;
    
    while (true) {
        cin >> input;
        if (input == "end") break;
        
        // 초기화
        vowelCnt = 0, consCnt = 0, resultNum = 0;
        vowelFlag = false;
        idx = 0;
        
        for (char ch : input) {
            auto it = find(vowels, vowels + 5, ch);

            if (idx == 0) preCh = ch;
            else if (preCh == ch && ch != 'e' && ch != 'o') { // 같은 글자 연속 두번으로 나올 때
                resultNum = 1;
                break;
            }

            if (it == end(vowels)) { // 자음일 때
                consCnt += 1;
                vowelCnt = 0;
                if (consCnt == 3) { // 자음이 3개 이상 나올 때
                    resultNum = 1;
                    break;
                }
            }
            else { // 모음일 때
                if (!vowelFlag) vowelFlag = true;
                vowelCnt += 1;
                consCnt = 0;
                if (vowelCnt == 3) {
                    resultNum = 1;
                    break;
                }
            }
            if (idx == input.size() - 1 && !vowelFlag) {
                resultNum = 1;
                break;
            }
            preCh = ch;
            idx += 1;
        }
        cout << '<' << input << '>' << result[resultNum] << "\n";
    }
    return 0;
}

 

'Algorithm > Algorithms Practice' 카테고리의 다른 글

[BOJ/C++] 집합(11723번)  (0) 2022.11.18
[BOJ/C++] A와 B 2(12919번)  (0) 2022.11.17
[BOJ/C++] 파티(1238번)  (0) 2022.11.15
[BOJ/C++] DFS와 BFS(1260번)  (0) 2022.11.14
[BOJ/C++] 접미사 배열(11656번)  (0) 2022.11.11