본문 바로가기
알고리즘

백준 g5 1759 암호 만들기 c++

by kyj0032 2024. 1. 16.

 

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