https://www.acmicpc.net/problem/1759
1. 순열시간초과 나는경우 해결
15! == 시간초과
해결 -> 포함,불포함 완탐 (2^15 == 32768)
2. 전체코드
#include <bits/stdc++.h>
using namespace std;
int l, c, visited[16];
vector<char> v;
int mo[128];
//현재까지 k번인덱스까지 포함,미포함 판단함 / 모음갯수/ tempStr
void dfs(int k, int cnt, string s) {
if (k == c) { //리프노드까지 모두탐색함
if (s.size() == l && cnt >= 1 && l - cnt >= 2) {
cout << s << "\n";
}
return;
}
//k번째 문자를 포함하는경우
dfs(k + 1, cnt+mo[v[k]], s + v[k]);
//포함안하는경우
dfs(k+1, cnt, s);
}
int main() {
ios_base::sync_with_stdio(0);
cin.tie(0);
cin >> l >> c;
mo['a'] = 1, mo['e'] = 1, mo['i'] = 1, mo['o'] = 1,mo['u']=1;
for (int i = 0; i < c; ++i) {
char c;
cin >> c;
v.push_back(c);
//a.push_back(i);
}
sort(v.begin(), v.end());
dfs(0, 0, "");
return 0;
}
'Algorithm > dfs' 카테고리의 다른 글
프로그래머스 소수찾기 c++ // 순열 3P1+3P2+3P3 하는방법, 소수판별함수, dfs (0) | 2023.12.04 |
---|---|
프로그래머스 미로탈출명령어 c++ // dfs 가지치기 방법, dfs중복방문 방법, dfs 시간복잡도 계산방법 (0) | 2023.12.02 |
프로그래머스 단어변환 c++ dfs ,백트래킹 // dfs 조건있는경우 해결방법 (0) | 2023.10.18 |
프로그래머스 전력망을 둘로 나누기 c++ // int dfs 자식수세기 (0) | 2023.10.02 |
프로그래머스 네트워크 c++ // 인접행렬 dfs (0) | 2023.09.13 |