항상 문자열에서 검사하고 중복 갯수세고 하는거 나오면
set()으로 목록 만들고
ord써서 반복문 돌릴수 있게 설계한다거나
char_count 배열에 갯수 저장해 넣고 뺄때 쓸 수 있게 설계.
string ='' 두고 더하고 빼고 슬라이싱 인덱싱 하는 스킬 더 기를 것.
문자열로 DFS돌리는 문제 은근 나옴.
슬라이싱으로 두문자씩, 두숫자씩 묶거나 숫자문자면 중간중간 int써서 수식계산 및 비교 까지 가능.
진법변환까지는 아직 문제못봄.
from sys import stdin
input = stdin.readline
def dfs(depth, string):
global N, cnt
if depth == N:
# print(string)
cnt += 1
return
# 종류별로 알파뱃 검사(깊이마다)
for char in charSet:
idx = ord(char) - 97
# 알파뱃 다썼으면 돌아감.
if charCnt[idx] == 0:
continue
# string 이 있고 전에 넣은게 지금꺼랑 같으면 돌아감.
if string and string[-1] == char:
continue
# 전꺼랑 안같고 갯수남았으면 넣어봄. string누적, depth한칸, 알파뱃 개수 -1
charCnt[idx] -= 1
dfs(depth + 1, string + char)
charCnt[idx] += 1
String = input().strip()
# 알파뱃 개수 누적. idx = ord('a')기준 0 -97해주면됨.
charCnt = [0] * 26
N = len(String)
cnt = 0
charSet = set()
# ord('a') = 97
# 숫자 세주고 charSet에 넣어 종류 파악.
for char in String:
idx = ord(char) - 97
charCnt[idx] = charCnt[idx] + 1
charSet.add(char)
# print(charSet, charCnt, cntSum)
dfs(0, '')
print(cnt)
'practivceAlgorithm > 백준' 카테고리의 다른 글
[백준][Python] 1759 암호만들기 (0) | 2021.07.21 |
---|---|
[백준][Python] 11725 트리의 부모찾기 (0) | 2021.07.21 |
[백준][Python] 11000강의실 배정. (0) | 2021.07.20 |
[백준][Python] 16929 two_dots (0) | 2021.07.20 |
[백준][Python] 1629 곱셈 (0) | 2021.07.20 |