해당 문제는 여기에서 확인하실 수 있습니다.
# 사용자 ID의 가능한 순열 생성을 위한 라이브러리
from itertools import permutations
def solution(user_id, banned_id):
# 주어진 user가 banned 패턴과 일치하는지 확인하는 함수
def is_match(user, banned):
# 길이가 다르면 매칭 불가
if len(user) != len(banned):
return False
# 각 문자 비교
for u, b in zip(user, banned):
# banned 아이디의 '*'는 어떤 문자와도 매칭됨
if b == '*':
continue
# 문자가 다르면 매칭 실패
if u != b:
return False
# 모든 조건을 통과하면 매칭 성공
return True
# 가능한 제재 아이디 조합을 저장할 set (중복 제거 목적)
possible_sets = set()
# user_id 중에서 banned_id 길이만큼 순열을 생성
for perm in permutations(user_id, len(banned_id)):
# 현재 순열이 모든 banned_id에 매칭되는지 확인할 플래그
matched = True
# 순열의 각 user와 banned를 비교
for u, b in zip(perm, banned_id):
# 하나라도 매칭 실패 시 중단
if not is_match(u, b):
matched = False
break
if matched:
# 같은 사용자 조합이라면 순서가 달라도 한 번만 세기 위해 frozenset을 사용
# frozenset을 사용하여 아이디 순서와 관계없이 같은 조합은 중복 제거
possible_sets.add(frozenset(perm))
# 가능한 고유 제재 아이디 조합의 개수 반환
return len(possible_sets)