- 문자열 길이 똑같은거
- 불량이 * 거나 같으면
-> 불량사용자에 매핑됨
매핑될 수 있는 모든 경우의 수를 구하라
- 딕셔너리 만들어서 조합 수학으로 계산하려고 함
- 키가 중복되는 이슈 -> banned_id는 중복가능
- 숫자만으로는 계산식 만들기 어려움
-> 순열(permutations)
-> 모든 순열 만들어서 검사
def check(user, banned):
index=0
flag=1
if len(user)!=len(banned):
flag=0
else:
while index < len(banned):
if user[index]!=banned[index] and banned[index]!="*":
flag=0
break
index+=1
if flag==0:
return False
else:
return True
index 증가시키면서 *도 아니고 같지 않으면 break 시킴
예를 들어 위의 경우 permutations 함수를 돌렸을때 (frodo, crodo, abc123, frodoc) 순열도 나올 수 있고 (frodo, crodo, frodoc, abc123) 순열도 나올 수 있다.
또한 이 2개 모두 검사식을 통과해서 둘다 count될 수 있음.
그러나 banned_id에 매핑되는 모든 조합을 계산하는 거라 이거는 중복임.
def solution(user_id, banned_id):
answer = 1
ps = list(permutations(user_id, len(banned_id)))
value=[]
for p in ps:
temp=0
i=0
while i < len(banned_id):
if check(p[i], banned_id[i]):
temp+=1
i+=1
if temp==len(banned_id) and set(p) not in value:
value.append(set(p))
return len(value)
이때 순열의 중복이 있는지 검산할때는 set()으로 만들어서 중복을 검산한다.
- 즉 여러 가지로 분열된 순열을 하나의 공통된 값으로 모은다.
(frodo, fradi, crodo, abc123)
(fradi, frodo, crodo, abc123)
모두 (frodo, fradi, crodo, abc123)으로 고정됨