문제
"맞았습니다" 코드
#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
'알고리즘 > 백준' 카테고리의 다른 글
소문난 칠공주 백준 1941번 c++ (0) | 2021.12.12 |
---|---|
계란으로 계란치기 백준 16987번 c++ (0) | 2021.12.11 |
로또 백준 6603번 c++ (0) | 2021.12.11 |
N과M(9) 백준 15663번 c++ (0) | 2021.12.10 |
하노이탑 이동 순서 백준 11729 c++ (0) | 2021.12.09 |