본문 바로가기
CodingTest/백준

[c++] 백준 - 1759번: 암호 만들기 | 재귀함수

by Daybreak21 2023. 7. 20.

1759번: 암호 만들기 (acmicpc.net)

 

1759번: 암호 만들기

첫째 줄에 두 정수 L, C가 주어진다. (3 ≤ L ≤ C ≤ 15) 다음 줄에는 C개의 문자들이 공백으로 구분되어 주어진다. 주어지는 문자들은 알파벳 소문자이며, 중복되는 것은 없다.

www.acmicpc.net

 

#include <iostream>
#include <string>
#include <algorithm>
using namespace std;

char a[15];
bool check(string &str, int l) {
	int m = 0;
	for (char x : str) if (x == 'a' || x == 'e' || x == 'i' || x == 'o' || x == 'u') m ++;
	return m >= 1 && l-m >= 2;
}

void password(int index, int start, int c, int l, string str) {
	if (index == l && check(str, l)) {
		cout << str << '\n';
		return;
	}

	for (int i = start; i < c; i++) password(index + 1, i + 1, c, l, str + a[i]);
}

int main() {
	int L, C; cin >> L >> C;
	for (int i = 0; i < C; i++) {
		char tmp; cin >> tmp; a[i] = tmp;
	}
	sort(a, a + C);

	password(0, 0, C, L, "");

	return 0;
}