알고리즘 문제
[백준] 1759번 암호 만들기
feelcoding
2020. 2. 11. 15:59
728x90
https://www.acmicpc.net/problem/1759
1759번: 암호 만들기
첫째 줄에 두 정수 L, C가 주어진다. (3 ≤ L ≤ C ≤ 15) 다음 줄에는 C개의 문자들이 공백으로 구분되어 주어진다. 주어지는 문자들은 알파벳 소문자이며, 중복되는 것은 없다.
www.acmicpc.net
#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
using namespace std;
int r, n;
vector<char> v;
void select(vector<bool> visited, vector<char> result, int num) {
if (num == r) {
int vowelCount = 0;
int consonantCount = 0;
for (int i = 0; i < r; i++) {
if (result[i] == 'a' || result[i] == 'e' || result[i] == 'i' || result[i] == 'o' || result[i] == 'u')
vowelCount++;
else
consonantCount++;
}
if (!(vowelCount >= 1 && consonantCount >= 2)) {
return;
}
for (int i = 0; i < r; i++) {
cout << result[i];
}
cout << '\n';
return;
}
for (int i = 0; i < n; i++) {
if (!visited[i]) {
if (num == 0) {
visited[i] = true;
result[num] = v[i];
select(visited, result, num + 1);
visited[i] = false;
}
else {
if (result[num - 1] < v[i]) {
visited[i] = true;
result[num] = v[i];
select(visited, result, num + 1);
visited[i] = false;
}
}
}
}
}
int main() {
cin.tie(NULL);
ios_base::sync_with_stdio(false);
cin >> r >> n;
for (int i = 0; i < n; i++) {
char temp;
cin >> temp;
v.push_back(temp);
}
sort(v.begin(), v.end());
vector<char> result(r);
vector<bool> visited(n);
select(visited, result, 0);
return 0;
}
728x90