[Python] 프로그래머스(Lv3) - 불량 사용자 (2019 카카오 개발자 겨울 인턴십 )

Kerri·2021년 5월 6일
0

코테

목록 보기
45/67

안녕하세요 :)

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)
profile
안녕하세요 !

0개의 댓글