안녕하세요 :)
https://programmers.co.kr/learn/courses/30/lessons/64064
풀이
python product를 이용하여 곱집합을 구해줍니다.
product란 [a, b] , [1, 2] 가 있을 때 (a, 1) , (a, 2), (b, 1) (b, 2) 처럼 원소를 하나씩 뽑아서 튜플형태로 만들어 주는 함수입니다.이렇게 해서 후보를 만들어줍니다.
후보중에서도 조건 2가지를 만족시켜야 result에 포함시킵니다.1) 후보들 중에서 중복이 있으면 답이 되지 않는 경우입니다.
즉, len(set(items)) = len(banned_id) 여야 중복된 경우 없이 만들어진 경우가 됩니다.2) [[aa], [bb]] 와 [[bb], [aa]]는 같은 경우이기 때문에 result에 add해줄때 items를 정렬하고 튜플로 만들어 넣어줬습니다.
from itertools import product
def is_match(banned, user):
if len(banned) != len(user):
return False
for i in range(len(banned)):
if not(banned[i] == '*' or banned[i] == user[i]):
return False
return True
def solution(user_id, banned_id):
banned_users = []
for banned in banned_id:
users = []
for user in user_id:
if is_match(banned, user):
users.append(user)
banned_users.append(users)
result = set()
banned_users = [list(set(x)) for x in banned_users]
hubo = list(product(*banned_users))
for items in hubo:
items = list(items)
if len(set(items)) == len(banned_id):
result.add(tuple(sorted(items)))
return len(result)