반응형
이번 문제는 조합을 이용하는 것입니다. 단지 조건이 좀 들어가 있습니다. 적어도 1개의 모음과 2개의 자음이 들어가야 합니다.
사실, 조합을 구한 다음에 모음의 개수를 세면, 그 외는 모두 자음이기때문에 손쉽게 풀 수 있습니다.
저는 재귀함수를 이용해서 풀었습니다. 모음의 개수를 따로 세어서 마지막에 검사를 했습니다.
재귀 함수를 사용하여 조합을 만들 수 있다면, 어렵지 않게 풀 수 있는 문제입니다. 암호의 길이가 길다면, 모음을 검사하는 비용이 클 수가 있기 때문에 주의가 필요하겠죠.
제가 작성한 소스입니다. 소스는 참고용으로 봐주세요.
//-------------------------------------------------------
// baekjoon #1759 - Making password
// - by Aubrey Choi
// - created at 2019-08-04
//-------------------------------------------------------
#include <stdio.h>
#include <algorithm>
void dup(char v[], char t[], int c, int s, int vowel, int m, int n)
{
if(c==n)
{
if(vowel==0||n-vowel < 2) return;
puts(t);
return;
}
for(int i=s;i<m;i++)
{
t[c]=v[i];
int s = v[i]=='a'||v[i]=='e'||v[i]=='i'||v[i]=='o'||v[i]=='u';
dup(v, t, c+1, i+1, vowel+s, m, n);
}
}
int main()
{
int n, c;
char v[16], t[16], ch;
scanf("%d%d", &n, &c);
for(int i=0;i<c;i++) { for(ch=getchar();ch<'a'||ch>'z';) ch=getchar(); v[i]=ch; }
std::sort(v, v+c);
t[n]=0;
dup(v, t, 0, 0, 0, c, n);
}
728x90
'Programming > BOJ' 카테고리의 다른 글
[C/C++] 백준 #1764 듣보잡(집합자료) (0) | 2022.10.15 |
---|---|
[C/C++] 백준 #1761 정점들의 거리(최소 공통 조상) (0) | 2022.10.11 |
[C/C++] 백준 #1758 알바생 강호(탐욕) (0) | 2022.10.11 |
[C/C++] 백준 #1755 숫자놀이(정렬) (0) | 2022.10.10 |
[C/C++] 백준 #1753 최단경로(다익스트라) (0) | 2022.10.10 |
댓글