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

2024. 1. 30. 19:00· Algorithm

문제

좋은 패스워드를 만드는것은 어려운 일이다. 대부분의 사용자들은 buddy처럼 발음하기 좋고 기억하기 쉬운 패스워드를 원하나, 이런 패스워드들은 보안의 문제가 발생한다. 어떤 사이트들은 xvtpzyo 같은 비밀번호를 무작위로 부여해 주기도 하지만, 사용자들은 이를 외우는데 어려움을 느끼고 심지어는 포스트잇에 적어 컴퓨터에 붙여놓는다. 가장 이상적인 해결법은 '발음이 가능한' 패스워드를 만드는 것으로 적당히 외우기 쉬우면서도 안전하게 계정을 지킬 수 있다. 

회사 FnordCom은 그런 패스워드 생성기를 만들려고 계획중이다. 당신은 그 회사 품질 관리 부서의 직원으로 생성기를 테스트해보고 생성되는 패스워드의 품질을 평가하여야 한다. 높은 품질을 가진 비밀번호의 조건은 다음과 같다.

  1. 모음(a,e,i,o,u) 하나를 반드시 포함하여야 한다.
  2. 모음이 3개 혹은 자음이 3개 연속으로 오면 안 된다.
  3. 같은 글자가 연속적으로 두번 오면 안되나, ee 와 oo는 허용한다.

이 규칙은 완벽하지 않다;우리에게 친숙하거나 발음이 쉬운 단어 중에서도 품질이 낮게 평가되는 경우가 많이 있다.

입력

입력은 여러개의 테스트 케이스로 이루어져 있다.

각 테스트 케이스는 한 줄로 이루어져 있으며, 각 줄에 테스트할 패스워드가 주어진다.

마지막 테스트 케이스는 end이며, 패스워드는 한글자 이상 20글자 이하의 문자열이다. 또한 패스워드는 대문자를 포함하지 않는다.

출력

각 테스트 케이스를 '예제 출력'의 형태에 기반하여 품질을 평가하여라.

 

접근 방식

먼저 조건에 따라 함수를 나눠주었다

1번 조건의 경우 문자열의 각 문자가 모음인지 판단하고 해당 문자열에 모음이 없을 경우 false를 반환해주었다

2번 조건의 경우 문자열의 문자가 모음일 경우 모음의 개수를 세어주고 자음일 경우 자음의 개수를 세어준다

이때 개수가 3이상이 되면 false를 리턴한다

3번 조건의 경우 만약 붙어있는 두 문자가 같고, ee와 oo가 아닐경우 false를 리턴해주었다.

 

코드

#include<bits/stdc++.h>
using namespace std;
vector<char> vowel = {'a','e','i','o','u'};
vector<char> consonant = {'b','c','d','f','g','h','j','k','l','m','n','p','q','r','s','t','u','v'};

bool first(string s) {
    for(auto c : s) {
        if(find(vowel.begin(),vowel.end(),c) != vowel.end()) return true;
    }
    return false;

} 

bool second(string s) {
    int vCnt = 0, cCnt = 0;
    for(auto c : s) {
        if(find(vowel.begin(),vowel.end(),c) != vowel.end()) { //모음이면
            vCnt++;
            if(vCnt == 3) return false;
            cCnt = 0;
        }
        else {
            cCnt++;
            if(cCnt == 3) return false;
            vCnt = 0;
        }
    }
    if(cCnt == 3 || vCnt == 3) return false;
    return true;
}

bool third(string s) {
    if(s.length() == 1) return true;
    for(int i=1; i<s.length(); i++) {
        if(s[i] == s[i-1]) {
            if(s[i] != 'e' && s[i] != 'o') return false;
            
        }
    }
    return true;
}

int main() {
    
    while(true) {
        string s;
        cin>>s;
        if(s == "end") break;
        if(first(s) && second(s) && third(s)) cout<<"<"<<s<<"> is acceptable."<<'\n';
        else cout<<"<"<<s<<"> is not acceptable."<<'\n';
        


    }
}

'Algorithm' 카테고리의 다른 글

[BOJ] 치즈 2636번 C++  (1) 2024.02.01
[BOJ] 영화감독 숌 1436번 C++  (0) 2024.01.30
[BOJ] 사과 담기 게임 2828번 C++  (0) 2024.01.30
[BOJ] 1 4375번 C++  (0) 2024.01.19
[BOJ] 팰린드롬 만들기 1213번 C++  (0) 2024.01.18
'Algorithm' 카테고리의 다른 글
  • [BOJ] 치즈 2636번 C++
  • [BOJ] 영화감독 숌 1436번 C++
  • [BOJ] 사과 담기 게임 2828번 C++
  • [BOJ] 1 4375번 C++
따봉치치
따봉치치
따봉치치
김치치의개발블로그
따봉치치
전체
오늘
어제
  • 분류 전체보기 (359)
    • 면접질문 (4)
    • CS (50)
    • FE (116)
      • Javascipt (16)
      • Typescipt (6)
      • React (16)
      • CSS (5)
      • Nextjs (1)
      • 리뷰 (70)
    • Algorithm (181)
    • ETC (3)
      • Bootcamp (4)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 문자열
  • TOPCIT
  • typescript
  • 그리디
  • CS
  • 모던 리액트 딥다이브
  • 자료구조
  • BOJ
  • 백트래킹
  • 투 포인터
  • javascript
  • 탐욕 알고리즘
  • dp
  • 리액트
  • Fe
  • react
  • 완전탐색
  • 스택
  • 백준
  • 그래프 탐색
  • BFS
  • 알고리즘
  • Greedy
  • 우선순위 큐
  • 누적합
  • 모던 자바스크립트 딥다이브
  • 데이터베이스
  • C++
  • Stack
  • 자바스크립트

최근 댓글

최근 글

hELLO · Designed By 정상우.v4.2.2
따봉치치
[BOJ] 비밀번호 발음하기 4659번 C++
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.