백준 1759 암호만들기 - C++

JangGwon·2022년 12월 18일
0

문제 설명


내 풀이

최소 한 개의 모음(a, e, i, o, u)과 최소 두 개의 자음을 사용한 암호 조합을 사전순으로 나열 하는 문제입니다.
먼저 사전순으로 나열하기 위해 사용가능한 암호단어를 사전순으로 정렬하였고, 이번 문제는 백트래킹 부류의 문제로 dfs로 완전탐색을 하면서 임의의 암호 조합이 만들어졌을때 문제 조건인 최소 한개 모음과 자음이 최소 두 개이면 출력하게 하였습니다.



코드

#include <iostream>
#include <algorithm>

using namespace std;

char input[16];
char result[16];
int l, c;
bool used[16];

void dfs(int a, int b,int mo, int ja)
{
    if (b == l)
    {
        if (mo >= 1 && ja >= 2)
        {
            cout << result << "\n";
        }
        return ;
    }
    for (int i = a; i < c; i++)
    {
        if (!used[input[i]])
        {
            result[b] = input[i];
            used[input[i]] = true;
            if (input[i] == 'a' || input[i] == 'e' || input[i] == 'i' || input[i] == 'u' || input[i] == 'o')
                dfs(i,b + 1,mo + 1,ja);
            else
                dfs(i,b+1,mo,ja +1);
            used[input[i]] = false;
        }
    }
}

int main()
{
    cin >> l >> c;
    for (int i  = 0; i < c; i++)
    {
        cin >> input[i];
    }
    sort(input,input+c);
    dfs(0,0,0,0);
}

0개의 댓글