[BOJ] 1759: 암호 만들기

https://www.acmicpc.net/problem/1759

1. 입력한 C글자를 오름차순으로 정렬

2. C에서 L을 선택합니다.

역추적에 의한 선택(조합론)출력 배열에 넣습니다.

3. 출력 배열에서 L이 포함된 문자를 확인합니다.

-> 자음이 2개 이상, 모음이 1개 이상인지 확인

-> 입력이 맞으면 오름차순으로 출력 후 종료

-> 조건이 만족되지 않으면 함수는 출력 없이 종료

#include <iostream>
#include <algorithm>
#define MAX_N 16

using namespace std;
char in(MAX_N), out(MAX_N);
int visited(MAX_N);
int L, C;

void solution(int depth, int start) {
  int v = 0, c = 0;
  if(depth == L) {
    for(int i = 0; i < L; i++) {
      if(out(i) == 'a' || out(i) == 'e' || out(i) == 'i' || out(i) == 'o' || out(i) == 'u') {
        v++;
      }
      else c++;
      if(v >= 1 && c >= 2) {
        sort(out, out + L);
        for(int i = 0; i < L; i++)
          cout << out(i);
        cout << "\n";
        return;
      }
      else continue;
    }
    return ;
  }
  else {
    for(int i = start; i < C; i++) {
      if(!
visited(i)) { visited(i) = true; out(depth) = in(i); solution(depth + 1, i + 1); visited(i) = false; } } } } int main() { cin >> L >> C; for(int i = 0; i < C; i++) cin >> in(i); sort(in, in + C); solution(0, 0); }