
DFS = 가능한 모든 조합을 만들고 유효한 조합을 찾는 것
탐색과 구현 = 조합(combinations) + 순열(permutations)
permutations(data, n) 은 iterable 객체에서 n 개의 데이터를 뽑아
일렬로 나열하는 모든 경우(순열)를 계산
check 함수는 user의 id가 banned_id에 해당되는지의 여부를 판별
zip은 interable에 여러 interable 객체를 2개이상 넘겨 처리 가능
zip 주의사항 : 함수로 넘길때 인자의 길이를 똑같이 해야됨.
set은 배열을 넣을시에 중복제거를 해준다
#https://bongseok.tistory.com/66
from itertools import permutations
def solution(user_id, banned_id):
def check(user,ban):
if len(user)==len(ban):
for i,j in zip(user,ban):
if j=='*':
continue
elif i != j:
return False
else:
return False
return True
answer = []
for permu in permutations(user_id,len(banned_id)):
flag = True
for i in range(len(banned_id)):
if not check(permu[i],banned_id[i]):
flag = False
if flag:
if set(permu) not in answer:
answer.append(set(permu))
return len(answer)
check 함수는 user id가 banned id에 해당하는지 여부를 판별,
길이가 같고, *를 제외한 요소가 같으면 True 반환
permutation 함수를 사용해 user id에서 banned id의 길이만큼 가능한 순열을 모두 구하고,
각 순열 순회하면서 flag가 True가 됐다면 set으로 순열에서 중복을 제거한 후 answer에 추가
마지막으로 answer의 길이 반환