티스토리 뷰

PS

[백준] 1759번 암호 만들기 C++

Eastplanet 2022. 7. 19. 11:12

문제 출처: https://www.acmicpc.net/problem/1759

 

1759번: 암호 만들기

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

www.acmicpc.net

백트래킹을 이용하여 조건에 맞는 단어를 출력한다.

이때 정답은 사전순으로 출력해야 하기 때문에 입력받은 배열을 sort함수를 통해 정렬한다.

 

#include<iostream>
#include<algorithm>
#include<unordered_map>
#include<cstring>
#include<math.h>
#include<queue>
#include<vector>

using namespace std;

int L, C;
char arr[15];
char aei[5] = { 'a','e','i','o','u'};
int visited[15];
int isAei[15];
int totalCount = 0;

void back(int idx, int aeiCount, int Count) {
	if (Count == L) {
		if (aeiCount < 1 || Count - aeiCount < 2)return;

		for (int i = 0; i < 15; i++) {
			if(visited[i]==1)cout << arr[i];
		}
		cout << endl;
	}
	else if (Count > L)return;

	for (int i = idx + 1; i < C; i++) {
		if (visited[i] == 1)continue;
		visited[i] = 1;

		if (isAei[i]) back(i, aeiCount+1, Count+1);
		else back(i, aeiCount, Count+1);

		visited[i] = 0;

	}
}


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

	cin >> L >> C;
	for (int i = 0; i < C; i++) { 
		cin >> arr[i]; 
	}



	sort(arr, arr + C);

	for (int i = 0; i < C; i++) {
		for (int j = 0; j < 5; j++) {
			if (arr[i] == aei[j])isAei[i] = 1;
		}
	}

	

	for (int i = 0; i < C; i++) {
		visited[i] = 1;
		if (isAei[i]) back(i, 1, 1);
		else back(i, 0, 1);
		visited[i] = 0;
	}



	
}

'PS' 카테고리의 다른 글

[백준] 11780번 플로이드 2 C++  (0) 2022.07.21
[백준] 10775번 공항 C++  (0) 2022.07.20
[백준] 1182번 부분수열의 합 C++  (0) 2022.07.18
[백준] 13565번 침투 C++  (0) 2022.07.15
[백준] 2644번 촌수계산  (0) 2022.07.14
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2026/01   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
글 보관함