[210408][백준/BOJ] 1759번 암호 만들기

문제

입출력


풀이

c개의 알파벳 중에 L개의 알파벳을 골라 가능한 수를 출력하는 문제이다.
알파벳은 최소 한개의 모음과 최소 두개의 자음으로 구성되어 있으며 알파벳은 오름차순으로 정렬되어 있다.

  1. 오름차순으로 정렬되어 있으므로 시작점이 필요하다.
  2. 최소 한개의 모음이 필요하므로 출력을 할 때 모음이 최소 한개 존재하는지 찾는다. 이는 bool 형식의 flag 변수를 통해 모음이 존재하는지 확인할 수 있다.
  3. 최소 두개의 자음이 필요하므로 전체 길이에서 모음의 개수를 뺀 값이 2보다 커야한다.
    전체길이(L) - 모음의 개수(count) >= 2

코드

#include <bits/stdc++.h>
using namespace std;

char board[17];
vector<char> V;
int L, C;
char c;

void func(int idx, int start)
{
	bool flag = true;
	int count = 0;
	if (idx == L)
	{
		for (int i = 0; i < L; ++i)
		{
			if (board[i] == 'a' || board[i] == 'e' || board[i] == 'i' || board[i] == 'o' || board[i] == 'u')
			{
				flag = false;
				count++;
			}
		}
		if (flag == false && L - count >= 2)
		{
			for (int i = 0; i < L; ++i)
				cout << board[i];
			cout << '\n';
		}
		return;
	}
	for (int i = start; i < V.size(); ++i)
	{
		board[idx] = V[i];
		func(idx + 1, i + 1);
	}
}

int main()
{
	ios::sync_with_stdio(0);
	cin.tie(0);

	cin >> L >> C;
	while (C--)
	{
		cin >> c;
		V.push_back(c);
	}
	sort(V.begin(), V.end());
	func(0, 0);
}

좋은 웹페이지 즐겨찾기