Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- Team Fortress 2
- 시뮬레이션
- 문자열
- BFS
- DFS
- 재귀
- 우선순위 큐
- 브루트포스
- 트리
- 구현
- 그래프
- 유니티
- 유니온 파인드
- VR
- 다이나믹 프로그래밍
- 백준
- XR Interaction Toolkit
- 정렬
- 백트래킹
- 수학
- 알고리즘
- 누적 합
- c++
- 다익스트라
- Unreal Engine 5
- 투 포인터
- 자료구조
- ue5
- 스택
- 그리디 알고리즘
Archives
- Today
- Total
1일1알
백준 1759번 암호 만들기 C++ 본문
주어진 알파벳들을 오름차순으로 정렬하고 백트래킹을 이용하여 해결할 수 있는 문제이다.
오름차순으로 정렬된 알파벳들을 중복되지 않게 순서대로 탐색하였으며, 종료 조건은 정답을 저장하는 배열의 크기가 암호의 크기와 같을 때 종료하도록 설계하였다.
한 가지 주의해야할 점은 암호는 한 가지의 모음과 두 가지의 자음이 필수적으로 있어야 한다. 따라서 정답을 출력할 때 그것을 확인하고 출력을 해야 한다.
#include <iostream>
#include <string>
#include <vector>
#include <math.h>
#include <algorithm>
#include <utility>
#include <stack>
#include <queue>
#include <math.h>
#include <set>
#include <unordered_set>
using namespace std;
typedef long long ll;
int l, c;
void BT(vector<char> v, vector<char> ans, int start) {
if (ans.size() >= l) {
bool isAns = false;
int vowelCnt = 0;
int consonantCnt = 0;
for (auto a : ans) {
if (a == 'a' || a == 'e' || a == 'i' || a == 'o' || a == 'u') {
vowelCnt++;
}
else {
consonantCnt++;
}
if (vowelCnt >= 1 && consonantCnt >= 2) {
isAns = true;
break;
}
}
if (isAns) {
for (auto a : ans){
cout << a;
}
cout << "\n";
}
return;
}
for (int i = start; i < v.size(); i++) {
ans.push_back(v[i]);
BT(v, ans, i + 1);
ans.pop_back();
}
}
int main() {
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
cin >> l >> c;
vector<char> v(c);
for (int i = 0; i < c; i++) {
cin >> v[i];
}
sort(v.begin(), v.end());
vector<char> ans;
BT(v, ans, 0);
};
'알고리즘' 카테고리의 다른 글
백준 2531번 회전 초밥 C++ (0) | 2021.11.06 |
---|---|
백준 2502번 떡 먹는 호랑이 C++ (0) | 2021.11.05 |
백준 12852번 1로 만들기 2 C++ (0) | 2021.11.03 |
백준 1926번 그림 C++ (0) | 2021.11.02 |
백준 10164번 격자상의 경로 C++ (0) | 2021.11.01 |