[백준/C++] 1759번 암호만들기

최대 1 분 소요

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);
}