Hello World!

[BOJ] 1759번: 암호 만들기 본문

알고리즘/baekjoon

[BOJ] 1759번: 암호 만들기

qkrgusdk 2020. 5. 10. 00:01

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

 

1759번: 암호 만들기

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

www.acmicpc.net

 

백트래킹에 거의 정형화되어 있는 재귀 함수를 짜는 연습하기에 좋은 문제였다.

 

단, 문제에서 암호를 사전 순으로 출력하라 했으므로 재귀 함수를 호출하기 전에 문자들을 정렬해주었다.

 

/*
20200401
baekjoon 1759번 암호 만들기
*/
#include <iostream>
#include <algorithm>
using namespace std;

char arr[15]; char ans[15];
bool isCon(char c) {
	if (c == 'a' || c == 'e' || c == 'i' || c == 'o' || c == 'u')
		return false;
	return true;
}

void func(int con, int vow, int cnt, int c, int l, int idx) {
	if (cnt == l) {
		if (con >= 2 && vow >= 1) {
			for (int i = 0; i < l; ++i)
				cout << ans[i];
			cout << "\n";
		}
		return;
	}

	for (int i = idx; i < c; ++i) {
		ans[cnt] = arr[i];
		if (isCon(arr[i]))
			func(con + 1, vow, cnt + 1, c, l, i + 1);
		else
			func(con, vow + 1, cnt + 1, c, l, i + 1);
	}
}

int main() {
	cin.tie(NULL); cout.tie(NULL); ios_base::sync_with_stdio(false);
	int l, c;
	cin >> l >> c;
	for (int i = 0; i < c; ++i) {
		cin >> arr[i];
	}

	sort(arr, arr + c);

	func(0, 0, 0, c, l, 0);
}

 

'알고리즘 > baekjoon' 카테고리의 다른 글

[BOJ] 2565번: 전깃줄  (0) 2020.05.12
[BOJ] 11053번: 가장 긴 증가하는 부분 수열  (0) 2020.05.12
[BOJ] 1748번: 수 이어 쓰기 1  (0) 2020.05.09
[BOJ] 2504번: 괄호의 값  (0) 2020.05.09
[BOJ] 1874번: 스택 수열  (0) 2020.05.07
Comments