[BOJ] 1759번 암호만들기

yeham·2022년 11월 10일
0

백준

목록 보기
12/22

문제

암호만들기

코드

#include <iostream>

using namespace std;

char arr[15];
char arr2[15];
bool ch[15];
int l, c, temp;
bool check = 0;
int mc = 0;
int jc = 0;

void ft_password(int m)
{
	if (m == l)
	{
		if (mc >= 1 && jc >= 2)
			cout << arr2 << '\n';
		return ;
	}
	for (int i = m; i < c; i++)
	{
		if (ch[i] == 1 )
			continue;
		arr2[m] = arr[i];
		if (m > 0 && arr2[m] < arr2[m - 1])
			continue;
		ch[i] = 1;
		if (arr[i] == 'a' || arr[i] == 'e' || arr[i] == 'i' || arr[i] == 'o' || arr[i] == 'u')
			mc++;
		else
			jc++;
		ft_password(m + 1);
		if (arr[i] == 'a' || arr[i] == 'e' || arr[i] == 'i' || arr[i] == 'o' || arr[i] == 'u')
			mc--;
		else
			jc--;
		ch[i] = 0;
	}
}

int main()
{
	ios::sync_with_stdio(0);
	cin.tie(0);
	cin >> l >> c;
	for (int i = 0; i < c; i++)
		cin >> arr[i];
	for (int i = 0; i < c; i++)
	{
		for (int j = 0; j < c - 1; j++)
		{
			if (arr[j] > arr[j + 1])
			{
				temp = arr[j];
				arr[j] = arr[j + 1];
				arr[j + 1] = temp;
			}
		}
	}
	ft_password(0);
	return (0);
}

요약

진짜 속칭 야매(?)로 풀었습니다.
차후 나올 42seoul push-swap에서 배운 전처리로 미리 정렬을 하고 재귀를 진행했는데 맞았으니 다행이지만 좀 더 깔끔하게 푸는 방법이 있을거라 생각하고 다른사람 코드를 한번 확인해 봐야 할 거 같습니다.

profile
정통과 / 정처기 & 정통기 / 42seoul 7기 Cardet / 임베디드 SW 개발자

0개의 댓글