Written by
최태열
on
on
[Python][프로그래머스][Level3] 불량 사용자
[Python][프로그래머스][Level3] 불량 사용자
코드
answer = set()
def ck(i,ans,check):
if i==len(check):
answer.add(tuple(sorted(ans)))
return
for j in check[i]:
if not j in ans:
ck(i+1,ans+[j],check)
def solution(user_id, banned_id):
check=[[] for _ in range(len(banned_id))]
for n,i in enumerate(banned_id):
for j in user_id:
if len(i)!=len(j):
continue
for idx in range(len(i)):
if i[idx]!="*" and i[idx]!=j[idx]:
break
else:
check[n].append(j)
ck(0,[],check)
return len(answer)
단계로 나눠서 문제를 풀었다.
-
banned_id와 같은 user_id를 포함하는 배열을 만들기
banned_id 와 같은 길이의 배열을 선언해서 *을 포함해서 같은 user_id를 append 했다.
-
배열에 있는 것들로 가능한 경우 모두 만들기
재귀하면서 가능한 경우들을 배열에 추가했다. 대신, 이미 배열안에 존재하는 값을 append 하려는 경우는 제외했다.
-
가능한 경우 중에서 중복 제거 banned_id 길이 만큼 만들경우, ans를 sort해서 set에 넣었다. 이 과정에서 중복이 사라진다.
Discussion and feedback