[ 백준 4659 ] 비밀번호 발음하기 (C++)

2024. 12. 12. 23:08·Algorithm/Baekjoon
반응형

[문제 풀이]

1. 패스워드에 모음(a, e, i, o, u) 하나를 포함하는지 체크

2. 패스워드에 모음이 3개 혹은 자음이 3개 연속으로 오는지 체크

3. 패스워드에 같은 글자가 연속적으로 두번 오는지 체크 (ee, oo는 허용)

[코드]

  • 패스워드에 모음(a, e, i, o, u) 하나를 포함하는지 체크하는 함수
bool firstCheck(string password){
    bool flag = false;
    int len = password.length();
    for(int i=0; i<len; i++){
        for(int j=0; j<5; j++){
            if(password[i] == mo[j]){
                flag = true;
                break;
            }
        }
        if(flag) break;
    }
    return flag;
}
  • 패스워드에 모음이 3개 혹은 자음이 3개 연속으로 오는지 체크하는 함수
bool secondCheck(string password){
    bool flag = true;
    int len = password.length();
    int cntMo = 0, cntJa = 0, check = 0;;
    for(int i=0; i<len; i++){
        string tmp = password.substr(i, 3);
        cntMo = 0;
        cntJa = 0;
        for(int j=0; j<tmp.length(); j++){
            check = 0;
            for(int k=0; k<5; k++){
                if(tmp[j] == mo[k]){
                    check = 1;
                    break;
                }
            }
            if(check == 0){
                cntJa++;
            }else{
                cntMo++;
            }
        }
        if(cntMo == 3 || cntJa == 3){
            flag = false;
            break;
        }
    }
    return flag;
}
  • 패스워드에 같은 글자가 연속적으로 두번 오는지 체크하는 함수 (ee, oo는 허용)
bool thirdCheck(string password){
    bool flag = true;
    int len = password.length();
    for(int i=0; i<len-1; i++){
        if(password[i] == password[i+1]){
            string tmp = password.substr(i, 2);
            if(tmp != "oo" && tmp != "ee"){
                flag = false;
                break;
            }
        }
    }
    return flag;
}

[전체 코드]

#include <iostream>
#include <string>
using namespace std;
char mo[5] = {'a', 'e', 'i', 'o', 'u'};
bool firstCheck(string password){
    bool flag = false;
    int len = password.length();
    for(int i=0; i<len; i++){
        for(int j=0; j<5; j++){
            if(password[i] == mo[j]){
                flag = true;
                break;
            }
        }
        if(flag) break;
    }
    return flag;
}
bool secondCheck(string password){
    bool flag = true;
    int len = password.length();
    int cntMo = 0, cntJa = 0, check = 0;;
    for(int i=0; i<len; i++){
        string tmp = password.substr(i, 3);
        cntMo = 0;
        cntJa = 0;
        for(int j=0; j<tmp.length(); j++){
            check = 0;
            for(int k=0; k<5; k++){
                if(tmp[j] == mo[k]){
                    check = 1;
                    break;
                }
            }
            if(check == 0){
                cntJa++;
            }else{
                cntMo++;
            }
        }
        if(cntMo == 3 || cntJa == 3){
            flag = false;
            break;
        }
    }
    return flag;
}
bool thirdCheck(string password){
    bool flag = true;
    int len = password.length();
    for(int i=0; i<len-1; i++){
        if(password[i] == password[i+1]){
            string tmp = password.substr(i, 2);
            if(tmp != "oo" && tmp != "ee"){
                flag = false;
                break;
            }
        }
    }
    return flag;
}
int main(){
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);
    string password;
    while(true){
        cin>>password;
        if(password == "end") break;
        if(firstCheck(password) && secondCheck(password) && thirdCheck(password)){
            cout<<"<"<<password<<"> is acceptable."<<"\n";
        }else{
            cout<<"<"<<password<<"> is not acceptable."<<"\n";
        }
    }
}

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

 

반응형

'Algorithm > Baekjoon' 카테고리의 다른 글

[ 백준 12789 ] 도키도키 간식드리미 (C++)  (0) 2025.01.26
[ 백준 17266 ] 어두운 굴다리 (JAVA)  (1) 2025.01.13
[ 백준 1937 ] 욕심쟁이 판다 (C++)  (0) 2024.12.30
[ 백준 5046 ] 전국 대학생 프로그래밍 대회 동아리 연합 (C++)  (0) 2024.12.13
[ 백준 2146 ] 다리 만들기 (C++)  (0) 2024.12.09
'Algorithm/Baekjoon' 카테고리의 다른 글
  • [ 백준 17266 ] 어두운 굴다리 (JAVA)
  • [ 백준 1937 ] 욕심쟁이 판다 (C++)
  • [ 백준 5046 ] 전국 대학생 프로그래밍 대회 동아리 연합 (C++)
  • [ 백준 2146 ] 다리 만들기 (C++)
CodeCaptain
CodeCaptain
BackEnd Developer code-0dyssey 님의 블로그 입니다.
  • CodeCaptain
    Code Odyssey
    CodeCaptain
  • 전체
    오늘
    어제
    • All (19)
      • BackEnd (3)
      • FrontEnd (0)
      • DB (0)
      • DevOps (1)
      • Algorithm (13)
        • Baekjoon (13)
      • CS (0)
      • ETC (2)
        • 회고 (1)
        • 책 (1)
  • 인기 글

  • 최근 댓글

  • 최근 글

  • 반응형
  • hELLO· Designed By정상우.v4.10.1
CodeCaptain
[ 백준 4659 ] 비밀번호 발음하기 (C++)
상단으로

티스토리툴바