본문 바로가기

PS

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

#include <bits/stdc++.h>
using namespace std;

int l, c;
char arr[20];
vector<char> vec;

bool is_valid(const char &elem) {  // 해당 문자가 모음인지
    return (elem == 'a' || elem == 'e' || elem == 'i' || elem == 'o' || elem == 'u');
}

void dfs(int level, int start, int cnt1, int cnt2) {
    if (level == l) {
        if (cnt1 < 2 || cnt2 < 1) return;  // 자음이 2개 미만이거나 모음이 1개 미만이면 출력 X
        for (int i = 0; i < l; ++i) {
            cout << arr[i];
        }
        cout << '\n';
        return;
    }
    for (int i = start; i < c; ++i) {
        arr[level] = vec[i];
        if (is_valid(arr[level])) {
            dfs(level + 1, i + 1, cnt1, cnt2 + 1);  // 문자가 모음인 경우 모음의 갯수를 카운트하여 재귀 함수 호출
        } else {
            dfs(level + 1, i + 1, cnt1 + 1, cnt2);  // 문자가 자음인 경우 자음의 갯수를 카운트하여 재귀 함수 호출
        }
    }
}

void solve() {
    cin >> l >> c;
    for (int i = 0; i < c; ++i) {
        char tmp;
        cin >> tmp;
        vec.push_back(tmp);
    }
    sort(vec.begin(), vec.end());
    dfs(0, 0, 0, 0);
}

int main() {
    ios::sync_with_stdio(0);
    cin.tie(0);
    solve();
    return 0;
}

'PS' 카테고리의 다른 글

백준 BOJ 11724 C++ [연결 요소의 개수]  (0) 2026.04.27
백준 BOJ 1260 C++ [DFS와 BFS]  (0) 2026.04.27
백준 BOJ 9663 C++ [N-Queen]  (0) 2026.04.25
백준 BOJ 15666 C++ [N과 M (12)]  (0) 2026.04.24
백준 BOJ 15665 C++ [N과 M (11)]  (0) 2026.04.24