문제 링크
https://www.acmicpc.net/problem/1342
풀이
$S$의 길이가 매우 작기 때문에 $S$를 재배치해서 만들 수 있는 모든 문자열을 확인할 수 있습니다. $len(S)!$의 모든 문자열을 본다면 구한 정답은 중복을 처리하지 않은 상태라서 문제에서 요구하는 답과는 다릅니다. 문자열의 중복이 일어나기 위해서는 같은 알파벳끼리 자리를 바꾸는 경우 뿐이고 알파벳마다 경우의 수는 $count(a)!$이므로 이 경우의 수를 중복이 포함된 정답에서 나눠준다면 중복을 제외한 문자열의 개수를 구할 수 있습니다. 모든 문자열을 보고 각 문자열이 행운 문자열인지 판별하기에 시간복잡도는 $O(S! ⋅ S)$입니다.
전체 코드
1 |
|