1342번 - 행운의 문자열
각 문자열의 갯수를 세고, 앞의 문자랑만 다르게 하면서 재귀함수를 이용해서 구현하면 된다.
백트래킹 문제
<정답 코드>
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 | #include<iostream> #include<string> using namespace std; int cnt[26]; int ans = 0; void go(int n,int p) { if (n == 0) { ans += 1; return; } for (int i = 0; i < 26; i++) { if (cnt[i] > 0 && i!=p) { cnt[i] -= 1; go(n - 1, i); cnt[i] += 1; } } } int main() { ios::sync_with_stdio(false); cin.tie(NULL); string s; cin >> s; for (int i = 0; i < s.size(); i++) { cnt[s[i] - 'a']++; } go(s.size(),-1); cout << ans << "\n"; return 0; } | cs |
반응형