본문 바로가기
백준

[백준 1759] 암호 만들기, C++

by 황인태(intaehwang) 2020. 9. 17.
반응형

www.acmicpc.net/problem/1759

 

1759번: 암호 만들기

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

www.acmicpc.net

본 문제는 주어진 c개의 문자 중  l개를 골라 암호를 만드는 문제다. 이때, 최소 한 개의 모음 (a, e, i, o, u)과 최소 두 개의 자음으로 구성되어 있어야 하며, 암호는 알파벳 순으로 이루어져야 한다.

따라서 주어진 c개의 문자를 정렬하고 c개 중 l개를 만들 수 있는 모든 경우의 수를 만들고 자음과 모음의 개수가 조건에 만족하는지 확인하면서 출력하면 된다.

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
#include <iostream>
#include <vector>
#include <algorithm>
#include <string>
 
using namespace std;
 
int main() {
  int n, m;
  cin >> n >> m;
  
  vector<char> v;
  for (int i = 0; i < m; i++) {
    char tmp;
    cin >> tmp;
    v.push_back(tmp);
  }
  sort(v.begin(), v.end());
  
  vector<int> u;
  for (int i = 0; i < n; i++) {
    u.push_back(0);
  }
  for (int i = 0; i < m-n; i++) {
    u.push_back(1);
  }
  
  do {
    int a = 0, b = 0;
    string s = "";
    for (int i = 0; i < m; i++) {
      if (u[i] == 0) {
        s += v[i];
        if (v[i] == 'a' || v[i] == 'e' || v[i] == 'i' || v[i] == 'o' || v[i] == 'u') a += 1;
        else b += 1;
      }
    }
    if (a >= 1 && b >= 2cout << s << "\n";
  } while (next_permutation(u.begin(), u.end()));
}
cs
반응형

'백준' 카테고리의 다른 글

[백준 14225] 부분수열의 합, C++  (0) 2020.09.27
[백준 3085] 사탕 게임, C++  (0) 2020.09.08
[백준 2309] 일곱 난쟁이, c++  (0) 2020.09.08
[백준 2668] 숫자고르기, c++  (0) 2020.07.26
[백준 15685] 드래곤 커브, C++  (0) 2020.05.16
Buy me a coffeeBuy me a coffee

댓글