프로그래머스 : 2019 카카오 개발자 겨울 인턴십 - 불량 사용자

2021. 10. 23. 04:40문제풀기/프로그래머스

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

 

코딩테스트 연습 - 불량 사용자

개발팀 내에서 이벤트 개발을 담당하고 있는 "무지"는 최근 진행된 카카오이모티콘 이벤트에 비정상적인 방법으로 당첨을 시도한 응모자들을 발견하였습니다. 이런 응모자들을 따로 모아 불량

programmers.co.kr

length로 나누어서 아이디를 저장한다. 이를 통해 시간을 줄일 수 있다.

그리고 파이썬의 set과 dictionary를 적절히 사용해서 구현하면 된다.

from itertools import product
def solution(user_id, banned_id):
    answer = 1
    length_dict = dict()
    count_banned = [[] for _ in range(len(banned_id))]
    
    for user in user_id:
        if len(user) in length_dict:
            length_dict[len(user)].append(user)
        else:
            length_dict[len(user)] = [user]
            
    for b in range(len(banned_id)):
        banned = banned_id[b]
        search_ids = length_dict[len(banned)]
        for search in search_ids:
            check = True
            for i in range(len(banned)):
                if banned[i] != "*" and banned[i] != search[i]:
                    check = False
                    break
            if check == True:
                count_banned[b].append(search)
                
    answer_list = list(product(*count_banned))
    
    final_set = []
    
    for a in answer_list:
        if len(a) == len(set(a)):
            if set(a) not in final_set:
                final_set.append(set(a))
            
    answer = len(final_set)

    return answer