본문 바로가기
코딩테스트

[파이썬] 불량 사용자 - 2019 카카오 개발자 겨울 인턴십 [CODING TEST #32]

by ALTERww 2022. 8. 1.
320x100

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

 

 

순열을 이용하여 banned_id의 길이에 맞춰 user_id로부터 모든 순열 조합을 뽑아낸다. 

그리고 조합 속 이름을 순서에 따라 조건을 따지면 된다.

순열로 뽑은 튜플 "user"와 banned_id가 같은 경우의 수인지 따지는 함수 ox()를 새로 정의했다.

 

from itertools import permutations
def same(user, banned_id):
    for word in range(len(user)):
        if len(user[word]) != len(banned_id[word]): #1. 길이 check
            return False
        for alpha in range(len(banned_id[word])):
            if banned_id[word][alpha] == '*' or user[word][alpha] == banned_id[word][alpha]: # '*'이거나 문자가 같은 경우
                continue    
            else: # 하나라도 다르면 False
                return False
    return True        

def solution(user_id, banned_id):
    user_per = list(permutations(user_id,len(banned_id)))
    banned_list = []
    
    # 하나의 튜플과 banned_id 비교
    for user in user_per:
        if same(user,banned_id):
            T = set(user)
            if T not in banned_list:
                banned_list.append(T)  
        else:
            continue
            
    return len(banned_list)

댓글