[백준/C++] 1759번 암호만들기
1.문제 링크
2. 풀이 전 계획과 생각
- 완전탐색
3. 풀이
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
int L,C;
char input[15], pwd[15];
// 모음인지 여부 확인
bool IsVowel(char c){
if(c=='a' || c=='e' || c=='i' || c=='o' || c=='u') return true;
else return false;
}
// 최소 한 개의 모음(vowel)(a, e, i, o, u)과 최소 두 개의 자음(consonant)
void makePassword(int len, int prev, int vowel, int consonant){
// 비밃번호가 완성...
if(len==L){
if(vowel>=1 && consonant>=2){ // 모음 한개, 자음 두개이상일 경우
for(int i=0;i<L;i++) cout<<pwd[i]; // 답 출력
cout<<'\n';
return;
}
}
// 정렬된 알파벳 한개씩...
for(int i=prev+1; i<C; i++){
char now = input[i]; // 알파벳 선택
pwd[len] = now;
if(IsVowel(now)) makePassword(len+1, i, vowel+1, consonant); // 모임일 경우
else makePassword(len+1, i, vowel, consonant+1); // 자음일 경우
}
}
int main(){
cin>>L>>C;
// 입력
for(int i=0;i<C;i++) cin>>input[i];
// 알파벳 사전순으로 정렬
sort(input, input+C);
// 비밀번호 만들기
makePassword(0,-1,0,0);
}