[프로그래머스 LV3] 불량 사용자

Junyoung Park·2022년 1월 8일
0

코딩테스트

목록 보기
42/631

1. 문제 설명

불량 사용자

2. 문제 분석

주어진 유저 아이디 중 제재된 수만큼 경우의 수를 골라보자. 순열을 통해 "어떤 아이디가 제재되었는지" 그 리스트를 만들어낸다. 이 리스트의 원소 하나씩 확인하면서 과연 진정 '제재 아이디'와 매치가 되는지 확인한다. 매치가 되는 경우는 '안 되는 경우'를 모두 배제한 경우이다.

  • 순서대로 확인했을 때, 1). 유저 아이디와 제재 아이디 길이가 같다. 2). digit를 비교할 때 서로 같지 않을 때 b가 '*'이면 continue, 그렇지 않으면 False를 리턴. 3). 모든 문자가 같다면 True를 리턴.
  • 가능한 유저 아이디 경우의 수가 동일할 수 있으므로 집합을 통해 확인한다.

3. 나의 풀이

from itertools import permutations 

def is_matched(users,banned_id):
    if len(users) != len(banned_id): return False
    
    for user, ban in zip(users, banned_id):
        if len(user) != len(ban): return False
        for u, b in zip(user, ban):
            if b == '*': continue
            elif u != b: return False
    return True

def solution(user_id, banned_id):
    user_cases = list(permutations(user_id,len(banned_id)))
    
    result = []
    for users in user_cases:
        if is_matched(users, banned_id):
            users = set(users)
            if users not in result:
                result.append(users)

    return len(result)
    
profile
JUST DO IT

0개의 댓글