title: "[프로그래머스] 불량 사용자 Python 파이썬 해설 (Level 3) - 이도훈"
cleanUrl: "programmers/64064"
description: "프로그래머스 Level 3 문제 [불량 사용자]의 풀이를 정리합니다."

문제 설명 및 제한사항

아이디어 및 해결 방법

코드

import re
from collections import Counter

ans = set()

def match(u, b):
    return re.fullmatch(b, u) is not None

def find(user_id, banned_id, i, state):
    global ans
    # banned_id[i]를 매치시켜봅니다.
    if i == len(banned_id):
        ans.add( tuple(sorted(state)) )
        return
    
    for u in user_id:
        if match(u, banned_id[i]):
            new_user_id = user_id[:]; new_user_id.remove(u)
            state.append(u)
            find(new_user_id, banned_id, i+1, state)
            state.pop()

def solution(user_id, banned_id):
    # regular expression이 매치되는지 안되는지 여부를 가지고
    # 퇴각검색을 활용합니다.
    banned_id = [b.replace('*', '.') for b in banned_id]
    find(user_id, banned_id, 0, [])
    return len(ans)

출처

프로그래머스 코딩테스트 연습 https://school.programmers.co.kr/learn/challenges