입력 | 출력 |
---|---|
aabbbaa | 1 |
: Counter를 이용해서 각 문자와 개수를 구한다. 그 이후에 인접해 있는 문자열이 같지 않도록 어떻게 하지?
- 백트래킹으로 이전 문자, depth를 인자로 넘긴다.
depth가 문자열의 길이와 같으면 행운의 문자열이 하나 만들어진 것이므로 1을 리턴한다.- for문을 돌려 counter의 key를 가지고
- 이전 문자와 key가 같으면 넘어간다.
- key의 개수가 0이면 넘어간다.
- key의 개수를 하나 줄이고 dfs로 key와 depth+1을 넘긴다.
- 끝까지 dfs를 수행하면 바로 이전 상황에서 dfs의 밑의 코드가 실행되면서 a, b개수를 다시 채운다.
- 베이스에 도달할때까지 수행
from collections import Counter
import sys
def dfs(pre, depth):
if depth == len(s):
return 1
ans = 0
for key in counter.keys():
if pre == key:
continue
if counter[key] == 0:
continue
counter[key] -= 1
ans += dfs(key, depth+1)
counter[key] += 1
return ans
s = sys.stdin.readline().rstrip()
counter = Counter(s)
dfs('', 0)