반응형
https://www.acmicpc.net/problem/1759
1759번: 암호 만들기
첫째 줄에 두 정수 L, C가 주어진다. (3 ≤ L ≤ C ≤ 15) 다음 줄에는 C개의 문자들이 공백으로 구분되어 주어진다. 주어지는 문자들은 알파벳 소문자이며, 중복되는 것은 없다.
www.acmicpc.net
재귀를 통해 적절히 모든 경우의 수를 탐색하면 됩니다.
풀이방법
1. 사전순으로 c개의 알파벳을 l개만큼 순서에 상관 없이 뽑아줍니다.
2. 모음이 최소 1개, 자음이 최소 2개라면 정답이므로 출력해줍니다.
Code
#include <bits/stdc++.h>
using namespace std;
int l,c,ck[16];
char letter[16];
vector <char> candidates;
void dfs(int depth, int idx){
if(depth == l) {
int vowel = 0,consonant = 0;
for(auto can : candidates){
if(can == 'a' || can == 'e' || can == 'i' || can == 'o' || can == 'u') vowel++;
else consonant++;
}
if(vowel < 1 || consonant < 2) return ;
for(auto c : candidates) cout << c;
cout << '\n';
return;
}
for(int i = idx; i < c; i++){
if(ck[i]) continue;
ck[i] = 1;
candidates.push_back(letter[i]);
dfs(depth + 1, i + 1);
candidates.pop_back();
ck[i] = 0;
}
}
int main(){
cin >> l >> c;
for(int i = 0; i < c; i++){
cin >> letter[i];
}
sort(letter,letter + c);
dfs(0,0);
}
'Algorithm > Brute Force' 카테고리의 다른 글
(C++) - 백준(BOJ) 21735번 : 눈덩이 굴리기 (0) | 2021.07.25 |
---|---|
(C++) - 백준(BOJ) 2003번 : 수들의 합 2 (0) | 2021.07.06 |
(C++) - 백준(BOJ) 1039번 : 교환 (0) | 2021.07.05 |
(C++) - 프로그래머스(2020 KAKAO BLIND RECRUITMENT) : 외벽 점검 (0) | 2021.07.04 |
(C++) - 프로그래머스(월간 코드 챌린지 시즌2) : 약수의 개수와 덧셈 (0) | 2021.05.16 |