문제 링크 : https://www.acmicpc.net/problem/1759

 

1759번: 암호 만들기

첫째 줄에 두 정수 L, C가 주어진다. (3 ≤ L ≤ C ≤ 15) 다음 줄에는 C개의 문자들이 공백으로 구분되어 주어진다. 주어지는 문자들은 알파벳 소문자이며, 중복되는 것은 없다.

www.acmicpc.net

 

 문제 설명 

 

1 , L , C 와 문자들이 주어진다.

2. L 길이의 암호를 추측할껀데 모음(a,e,i,o,u)  한개이상 자음 2개이상 필요하고 사전 순서로 정렬 된 것만

   암호로 사용 할 수있다.

3. 암호로 사용 가능한 문자를 모두 출력

 

 알고리즘 

 

일단 재귀로 구현 .

1. 입력받고 정렬

2. 재귀함수에서 string 의길이가 L이면 모음 갯수와 자음 갯수 검사하여 암호로 사용가능하면 출력 후 return

 

 

 코드 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
#include<iostream>
#include<algorithm>
using namespace std;
int L, C;
char arr[16];
 
 
void func(int idx, int moum, int jaum, string str) {
 
    //문자열의 길이가 L과 똑같으면
    if (str.length() == L) {
        //자음갯수와 모음 갯수를 확인후
        if (moum >= 1 && jaum >= 2) {
 
            //암호로 사용 가능하면 출력
            cout << str << "\n";
 
            return;
        }
        return;
    }
 
    for (int i = idx; i < C; i++) {
        string s = str;
        s.push_back(arr[i]);
 
        //현재 문자가 모음이면 모음+1 후 재귀
 
        if (arr[i] == 'a' || arr[i] == 'e' || arr[i] == 'i' || arr[i] == 'o' || arr[i] == 'u') {            
            func(i + 1, moum + 1, jaum, s);
        }
 
        //현재 문자가 자음이면 자음+1후 재귀
        else {
            func(i + 1, moum, jaum + 1, s);
        }
    }
    return;
 
}
 
 
 
 
 
int main() {
    cin >> L >> C;
 
    for (int i = 0; i < C; i++cin >> arr[i];
    sort(arr, arr + C);
    func(000"");
 
}
cs

'c++ > 백준' 카테고리의 다른 글

백준 6236번: 용돈 관리  (0) 2020.04.16
백준 1992번: 쿼드트리  (0) 2020.04.16
백준 14499번 : 주사위 굴리기  (0) 2020.04.16
백준 1780번 : 종이의 개수  (0) 2020.04.14
백준 2805번: 나무 자르기  (0) 2020.04.14
ariz1623