반응형

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

 

1759번: 암호 만들기

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

www.acmicpc.net

 

주어진 문자를 정렬하고, 재귀로 가능성 있는 암호문을 구해주었습니다.

 

#include <iostream>
#include <algorithm>
using namespace std;
#define MAX 16

int l, c;
char ch[MAX], res[MAX];

bool isMo(char alp) {
	return alp == 'a' || alp == 'e' || alp == 'i' || alp == 'o' || alp == 'u';
}

bool isJa(char alp) {
	return !isMo(alp);
}

void f(int idx, int mo, int ja, int len) {
	if (idx == c + 1) return;
	if (len == l) {
		if (mo > 0 && ja > 1) {
			cout << res << "\n";
		}
		return;
	}

	res[len] = ch[idx];
	f(idx + 1, mo + isMo(ch[idx]), ja + isJa(ch[idx]), len + 1);
	f(idx + 1, mo, ja, len);
}

int main() {
	ios::sync_with_stdio(false);
	cin.tie(NULL); cout.tie(NULL);

	cin >> l >> c;
	for (int i = 0; i < c; i++) {
		cin >> ch[i];
	}
	sort(ch, ch + c);
	f(0, 0, 0, 0);
 }
반응형

'Algorithm' 카테고리의 다른 글

백준 18222 : 투에-모스 문자열  (0) 2021.11.19
백준 22945 : 팀 빌딩  (0) 2021.11.19
백준 14567 : 선수과목 (Prerequisite)  (0) 2021.11.19
백준 2581 : 소수  (0) 2021.11.19
백준 1747 : 소수&팰린드롬  (0) 2021.11.19

+ Recent posts