chyam

[프로그래머스 Lv3, python] - 불량 사용자 본문

프로그래머스/LV3

[프로그래머스 Lv3, python] - 불량 사용자

chyam_eun 2026. 5. 6. 17:19

https://school.programmers.co.kr/learn/courses/30/lessons/64064

 

프로그래머스

SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

def solution(user_id, banned_id):
    result = set()

    # 매칭 체크 함수
    def check(user, banned):
        if len(user) != len(banned):
            return False
        for i in range(len(user)):
            if banned[i] == '*':
                continue
            if user[i] != banned[i]:
                return False
        return True

    def dfs(bid, visited):
        # 모든 banned_id를 다 매칭한 경우
        if bid == len(banned_id):
            selected = []
            for i in range(len(user_id)):
                if visited[i]:
                    selected.append(user_id[i])
            
            # 순서 제거 위해 정렬 후 tuple
            result.add(tuple(sorted(selected)))
            return

        for i in range(len(user_id)):
            if not visited[i] and check(user_id[i], banned_id[bid]):
                visited[i] = True
                dfs(bid + 1, visited)
                visited[i] = False

    dfs(0, [False] * len(user_id))
    return len(result)