티스토리 뷰
문제 출처: 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
링크
TAG
- 상범빌딩
- 골목길C++
- 타임머신
- 1918
- 어린왕자 C++
- 소셜네트워킹어플리케이션
- 후위 표기식
- 벨만포드
- C++
- 1004
- 11657
- 백준
- 6539
- 스택
- 중위 표기식 후위 표기식으로 변환
- 7511
- 벨만-포드
- 6018
- tea time
- 골목길
- 1738
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
글 보관함
