본문 바로가기
algorithm

[algorithm] 백준 - 암호만들기

by 대우니 2020. 10. 30.
728x90
반응형

조합과 동일하다.
이 곳에서 조건이 있는데 모음은 1개 이상, 자음은 2개 이상이어야 한다.
알파벳이 모음일 경우 모음변수를 하나 증가시키고, 자음일 경우 자음 변수를 하나 증가시킨다.

if(isVowel(realVector[index])){
        combination(vowelCount + 1, consonantCount, index + 1, alphaVector, realVector, target - 1);
    }
    else{
        combination(vowelCount, consonantCount + 1, index + 1, alphaVector, realVector, target - 1);
    }


target에 도달하고, 조건에 일치할 경우 알파벳 열을 출력하면 된다.

if(vowelCount >= 1 && consonantCount >= 2 && target == 0){
        for(int i = 0; i < alphaVector.size(); i++){
            cout << alphaVector[i];
        }
        cout << "\n";
        return;
    }

전체적인 코드는 이렇다.

// 암호만들기
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
char vowelArray[] = {'a','e','i','o','u'};
bool isVowel(char alpha){
    for(int i = 0; i < 5; i++){
        if(alpha == vowelArray[i])
            return true;
    }
    return false;
}
void combination(int vowelCount, int consonantCount, int index, vector<char> alphaVector, vector<char> realVector, int target){
    if(vowelCount >= 1 && consonantCount >= 2 && target == 0){
        for(int i = 0; i < alphaVector.size(); i++){
            cout << alphaVector[i];
        }
        cout << "\n";
        return;
    }
    if(index == realVector.size()){
        return;
    }
    alphaVector.push_back(realVector[index]);
    if(isVowel(realVector[index])){
        combination(vowelCount + 1, consonantCount, index + 1, alphaVector, realVector, target - 1);
    }
    else{
        combination(vowelCount, consonantCount + 1, index + 1, alphaVector, realVector, target - 1);
    }
    alphaVector.pop_back();
    combination(vowelCount, consonantCount, index + 1, alphaVector, realVector, target);
}
int main(void){
    int count, target;
    char alpha;
    cin >> target >> count;
    vector<char>realVector, alphaVector;
    for(int i = 0; i < count; i++){
        cin >> alpha;
        realVector.push_back(alpha);
    }
    sort(realVector.begin(), realVector.end());
    combination(0,0,0,alphaVector,realVector,target);
}

https://github.com/jeongdaeun98/algorithm/blob/master/2020/20102909.cpp

 

jeongdaeun98/algorithm

백준, 프로그래머스. Contribute to jeongdaeun98/algorithm development by creating an account on GitHub.

github.com

 

반응형