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 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 | #include <string> #include <vector> #include <set> #include <iostream> #include <algorithm> using namespace std; set<vector<string>> s; bool chk[9]; int answer = 0; bool check(string id, int idx, vector<string> &ban) { if (id.size() != ban[idx].size()) return false ; for ( int i = 0; i < id.size(); i++) { if (ban[idx][i] == '*' ) continue ; if (id[i] != ban[idx][i]) return false ; } return true ; } void dfs( int idx, int cnt, vector<string>&user, vector<string>&ban, vector<string> &res) { if (cnt == ban.size()) { vector<string> tmp; tmp = res; // for (int i = 0; i < res.size(); i++) cout << res[i] << ' '; // cout << '\n'; sort(tmp.begin(), tmp.end()); s.insert(tmp); // answer++; return ; } for ( int i = 0; i < user.size(); i++) { if (!chk[i]) { if (check(user[i], cnt, ban)) { chk[i] = true ; res.push_back(user[i]); dfs(i+1, cnt+1, user, ban, res); res.pop_back(); chk[i] = false ; } } } } int solution(vector<string> user, vector<string> ban) { vector<string> res; dfs(0,0,user, ban, res); answer = s.size(); return answer; } |
'Programmers > 프로그래머스' 카테고리의 다른 글
[Programmers] 등굣길 (0) | 2020.04.02 |
---|---|
[Programmers] 튜플 (python) (0) | 2020.04.01 |
[Programmers] 크레인 인형뽑기 게임 (0) | 2020.04.01 |
[Programmers] 여행경로 (0) | 2020.03.31 |
[Programmers] 정수 삼각형 (0) | 2020.03.31 |