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

KeonWoo Kim·2021년 4월 8일
0

알고리즘

목록 보기
44/84

문제

입출력


풀이

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);
}
profile
안녕하세요

0개의 댓글

관련 채용 정보