https://www.acmicpc.net/problem/1759


1. 문제 이해


 모음 1개와 자음 2개 이상이 꼭 포함 된다는 것을 기억해야 합니다.


2. 접근 방법


로또 (http://sbell92.tistory.com/15?category=640303) 문제와 비슷한 방법으로 접근했습니다.


dfs를 이용해 완전 탐색을 하되, 모음과 자음일 경우를 고려해 주었습니다.



3. 문제 해결


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
54
55
56
57
#include <algorithm>
#include <iostream>
#include <vector>
#define MAX_SIZE 20
 
using namespace std;
 
int l, c, ja, mo;
vector<char> res;
 
void dfs(vector<char>& v, int d, int cnt) {
    if (l == cnt && mo >= 1 && ja >= 2) {
        for (int i = 0; i < res.size(); i++) {
            cout << res[i];
        }
        cout << '\n';
        return;
    }
    if (l == cnt) return;        // 모음, 자음 만족 안하고 길이가 l이 될때
    if (c == d) return;            // 완전히 탐색했을때
 
    if (v[d] == 'a' || v[d] == 'e' || v[d] == 'i' || v[d] == 'o' || v[d] == 'u') {
        mo++;
    }
    else {
        ja++;
    }
 
    res.push_back(v[d]);
    dfs(v, d + 1, cnt + 1);
 
    char out = res.back();
    if (out == 'a' || out == 'e' || out == 'i' || out == 'o' || out == 'u') {
        mo--;
    }
    else {
        ja--;
    }
    res.pop_back();
    dfs(v, d + 1, cnt);
}
 
int main() {
    cin >> l >> c;
 
    char input;
    vector<char> v;
    for (int i = 0; i < c; i++) {
        cin >> input;
        v.push_back(input);
    }
    sort(v.begin(), v.end());
 
    dfs(v, 00);
 
    return 0;
}
cs


※ 오늘의 코드 리뷰 : 벡터가 점점 익숙해져 갑니다. ㅎㅎ

'Algorithm > solution' 카테고리의 다른 글

#14502. 연구소  (4) 2018.01.16
#1953. [모의 SW 역량테스트] 탈주범 검거  (0) 2018.01.07
#2140. 지뢰찾기  (0) 2017.12.29
#6305. 로또  (0) 2017.12.26
#1463. 1로 만들기  (0) 2017.12.24

+ Recent posts