https://www.acmicpc.net/problem/1759
1759번: 암호 만들기
첫째 줄에 두 정수 L, C가 주어진다. (3 ≤ L ≤ C ≤ 15) 다음 줄에는 C개의 문자들이 공백으로 구분되어 주어진다. 주어지는 문자들은 알파벳 소문자이며, 중복되는 것은 없다.
www.acmicpc.net

풀이
moCnt와 jaCnt로 각각 모음과 자음 개수를 세 준 뒤에, 조건에 맞으면 출력하고 그렇지 않으면 그냥 return하면 된다
소스 코드
/*boj g5 1759 암호 만들기*/
#include <algorithm>
#include <iostream>
#define MAXN 20
using namespace std;
int L, C;
char ans[MAXN];
char arr[MAXN];
int moCnt = 0;
int jaCnt = 0;
void func(int k, int i) {
if (k == L) {
if (moCnt >= 1 && jaCnt >= 2) {
for (int l = 0; l < L; l++) {
cout << ans[l];
}
cout << "\n";
}
return;
}
for (int j = i; j < C; j++) {
if (arr[j] == 'a' || arr[j] == 'e' || arr[j] == 'i' || arr[j] == 'o' || arr[j] == 'u') {
moCnt++;
} else {
jaCnt++;
}
ans[k] = arr[j];
func(k + 1, j + 1);
if (arr[j] == 'a' || arr[j] == 'e' || arr[j] == 'i' || arr[j] == 'o' || arr[j] == 'u') {
moCnt--;
} else {
jaCnt--;
}
}
}
int main(void) {
ios::sync_with_stdio(0);
cin.tie(0);
cin >> L >> C;
for (int i = 0; i < C; i++) {
cin >> arr[i];
}
sort(arr, arr + C);
func(0, 0);
}
'알고리즘' 카테고리의 다른 글
백준 g3 1941 소문난 칠공주 c++ (0) | 2024.01.16 |
---|---|
백준 g5 16987 계란으로 계란치기 c++ (0) | 2024.01.16 |
백준 15665 N과 M (11) c++ (0) | 2024.01.15 |
백준 s2 15663 N과 M (9), s2 15664 N과 M(10) c++ (0) | 2024.01.15 |
백준 s3 15654 N과 M (5) c++ (0) | 2024.01.15 |