문제

암호 만들기 백준 1759

"맞았습니다" 코드

#include <bits/stdc++.h>
using namespace std;

int L, C;
char ch;
vector<int> v;
vector<char> vo = {'a', 'e', 'i', 'o', 'u'};

bool checkvo(string st){
  int mo = 0, ja = 0;
  for(int i = 0; i < L; i++){
    auto it = find(vo.begin(), vo.end(), st[i]);
    if((it - vo.begin()) == vo.size()) {
      ja++;
    }else{
      mo++;
    }
  }

  return (mo > 0 && ja >= 2);
}

void permu(){

  vector<int> tempv(C, 1); // C개 만큼 1 으로 초기화.
  for(int i = 0; i < L; i++){
    tempv[i] = 0;
  } // 선택할 L개만 0으로 초기화

  do{
    string st = "";
    for(int i = 0; i < C; i++){
      if(tempv[i]==0){
        st += v[i];
      }
    }
    if(checkvo(st)){
      cout << st << '\n';
    }
  }while(next_permutation(tempv.begin(), tempv.end()));
}

int main(void) {
  ios::sync_with_stdio(0);
  cin.tie(0);

  cin >> L >> C; // 선택할 개수, 총 개수

  for(int i = 0; i < C; i++){
    cin >> ch;
    v.push_back(ch);
  }
  sort(v.begin(), v.end());
  permu();

  return 0;
}

리뷰

C개 중에 L개를 선택하도록
{0, 0, 0, 0, 1, 1} 배열을 만들어서 next_permutation() 으로 돌렸다.
길이는 L, 0의 개수는 C개 여야 한다.

0인 자리의 문자를 모아서 string 으로 붙였다.
string 에 모음과 자음 개수를 세서 반환하게 했다.

728x90

+ Recent posts