본문 바로가기
알고리즘

[알고리즘] 불량 사용자

by keel_im 2021. 5. 6.
반응형

포인트

  • 불량 사용자의 경우의 수를 찾는 프로그램을 만들어야 합니다. 전체적으로 데이터가 있고 불량 사용자가 있는 경우들을 표시합니다. 각각의 경우를 계산하여 구하고자 하는 경우를 찾아야 합니다. 

🧶문서는 항상 수정될 수 있습니다. 비판은 환영합니다. 

python

from collections import defaultdict
from itertools import product


def check(string1: str, string2: str) -> bool:
    if len(string1) != len(string2):
        # 길이가 다르면 False
        return False

    for i in range(len(string1)):
        if string1[i] == "*":
            # * 이 나오면 통과
            continue
        if string1[i] != string2[i]:
            # 다른게 하나라도 있으면 False
            return False
    # 다 통과하면 True
    return True


def solution(user_id, banned_id):
    mapper = defaultdict(list)
    # 각각의 배열을 저장하기 위한 딕셔너리
    for index, ban in enumerate(banned_id):
        for user in user_id:
            if check(ban, user):
                mapper[str(index) + ban].append(user)
                # 중복될 수 있기 때문에 순서와 같이 저장
    result = []
    for value in mapper.values():
        # 각각의 배열의 프로덕트를 하기 위한 처리 
        result.append(value)

    products = list(product(*result))
    answer = set()

    for target in products:
        if len(set(target)) == len(banned_id):
            # 크기가 같으면 조합으로 인정
            answer.add("".join(sorted(target)))

    return len(answer)
반응형

댓글