[BOJ]1759 암호 만들기

강동현·2024년 1월 10일
0

코딩테스트

목록 보기
77/111
  • 흔하디 흔한 DFS + 백트래킹 문제
  • 걸리는 점은 자음 모음의 개수
  • 암호의 길이가 L이 될 때, 자음 모음의 개수가 조건을 충족하면 값 출력
    • 자음: 최소 1개
    • 모음: 최소 2개
#include <algorithm>
#include <iostream>
#include <vector>
using namespace std;
int L, C;
vector<char> v;
string curstr;
bool check(){
    int moum = 0;
    for(int i = 0; i < L; ++i){
        if(curstr[i] == 'a' ||
        curstr[i] == 'e' ||
        curstr[i] == 'i' ||
        curstr[i] == 'o' ||
        curstr[i] == 'u') 
        moum++;
    }
    //모음 수 1개 이상, 자음 수 = 전체 수 - 모음 수 = 2개 이상
    if(moum >= 1 && L - moum >= 2) 
        return true;
    else
        return false;
}
void DFS(int N){
    if((int)curstr.size() == L){
        if(check()){
            for(int i = 0; i < L; ++i){
                cout << curstr[i];
            }
            cout << '\n';
        }
        return;        
    }
    for(int i = N; i < C; ++i){
        curstr.push_back(v[i]);//들어갈 때, 추가
        DFS(i + 1);
        curstr.pop_back();//나올 때, 빼기
    }
}   
int main(){
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    cin >> L >> C;
    for(int i = 0; i < C; ++i){
        char tmp;
        cin >> tmp;
        v.push_back(tmp);
    }
    sort(v.begin(), v.end());
    DFS(0);
}
profile
GAME DESIGN & CLIENT PROGRAMMING

0개의 댓글