[PS] 백준 1759번(골드 5) - 암호 만들기

조재훈·2024년 10월 29일
0

문제

백준 1759번

코드

#include <bits/stdc++.h>

using namespace std;

int L, C;
vector<char> alpha;
vector<char> password;

void Func(int start, int length)
{
    if (length == L)
    {
        int count1 = 0;     // 모음 개수
        int count2 = 0;     // 자음 개수

        string s;
        for (char c : password)
        {
            s += c;
            if (c == 'a' || c == 'e' || c == 'i' || c == 'o' || c == 'u')
            {
                count1++;
            }
            else
            {
                count2++;
            }
        }

        if (count1 >= 1 && count2 >= 2)
        {
            cout << s << '\n';
        }

        return;
    }

    for (int i = start; i < C; i++)
    {
        password.push_back(alpha[i]);
        Func(i + 1, length + 1);
        password.pop_back();
    }
}

int main()
{
    cin >> L >> C;

    for (int i = 0; i < C; i++)
    {
        char c;
        cin >> c;
        alpha.push_back(c);
    }

    sort(alpha.begin(), alpha.end());

    Func(0, 0);

    return 0;
}

풀이

재귀를 이용한 조합 만들기 문제이다

처음에 암호로 사용했을 법한 문자의 종류들을 alpha 벡터에 추가 후 정렬된 문자열을 선호하니 오름차순해준다

그리고 Func(start, length) 함수를 호출해 alpha 벡터의 0번째부터 C번째까지 한 문자씩 선택하며 password 벡터에 데이터를 추가했다가 백트래킹으로 제거한다

password의 길이가 L이되면 꺼내보면서 조건을 확인하고 조건에 맞으면 출력한다

profile
나태지옥

0개의 댓글