1759번: 암호 만들기
첫째 줄에 두 정수 L, C가 주어진다. (3 ≤ L ≤ C ≤ 15) 다음 줄에는 C개의 문자들이 공백으로 구분되어 주어진다. 주어지는 문자들은 알파벳 소문자이며, 중복되는 것은 없다.
www.acmicpc.net
코드
#include <bits/stdc++.h>
using namespace std;
vector<char> code;
vector<int> tmp;
int main()
{
int n, m;
char c;
cin >> n >> m;
for (int i = 0; i < n; i++)
tmp.push_back(1);
for (int i = n; i < m; i++)
tmp.push_back(0);
while (m--) {
cin >> c;
code.push_back(c);
}
sort(code.begin(), code.end());
do {
vector<char> x;
bool cond = false, cond1 = false;
int cond2 = 0;
for (int i = 0; i < tmp.size(); i++) {
if (tmp[i] == 1)
x.push_back(code[i]);
}
for (char i : x) {
if (i == 'a' || i == 'e' || i == 'i' || i == 'o' || i == 'u')
cond1 = true;
else
cond2++;
if (cond1 && cond2 >= 2) {
cond = true;
break;
}
}
if (cond) {
for (char i : x)
cout << i;
cout << "\n";
}
} while (prev_permutation(tmp.begin(), tmp.end()));
}
풀이
- 암호 알파벳 추출
순서는 오름차순으로 고정되기 때문에, 전체 알파벳들 중 암호 수만큼만 뽑아내면 됨
=> 조합 사용 (permutation 함수) - 알파벳 소문자는 최소 한 개의 모음과 최소 두 개의 자음으로 구성되어야 함
조건문을 통해 일일이 처리 (cond 변수들) - 알파벳 오름차순 순서 적용
sort()로 정렬 후 앞부터 차례대로 출력용 배열에 삽입
'Problem Solving' 카테고리의 다른 글
| [ 프로그래머스 / java ] 매칭 점수 ( 2019 KAKAO BLIND RECRUITMENT ) (0) | 2023.01.21 |
|---|---|
| [ 프로그래머스 / java ] 길 찾기 게임 ( 2019 KAKAO BLIND RECRUITMENT ) (0) | 2023.01.15 |
| C++) 백준 20055 컨베이어 벨트 위의 로봇 (0) | 2022.08.06 |
| C++) 백준 16562 친구비 (0) | 2022.08.06 |
| C++) 백준 4482 녹색 옷을 입은 애가 젤다지? (0) | 2022.08.03 |