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

O2o2✨·2020년 12월 21일
0

알고리즘

목록 보기
35/43

링크 : 2019 카카오 개발자 겨울 인턴십 > 불량 사용자


코드

from itertools import permutations


def checkSpelling(u_id, b_id):
    for i in range(len(b_id)):
        if b_id[i] == '*':
            continue
        elif b_id[i] != u_id[i]:
            return False
    return True
    
def matching(u_id, b_id):
    for i in range(len(b_id)):
        if len(u_id[i]) != len(b_id[i]): # 길이가 다르면
            return False
        if checkSpelling(u_id[i], b_id[i]): # 길이가 같을때 스펠링 검사
            continue
        else:
            return False
    return True

def solution(user_id, banned_id): 
    answer = []
    
    for permus_id in permutations(user_id, len(banned_id)):
        if matching(permus_id, banned_id) and set(permus_id) not in answer:
            answer.append(set(permus_id))
            
    return len(answer)

풀이

  • 사용자 아이디 목록을 제재 아이디 개수로 만들수있는 순열로 만든다.
  • 생성된 순열과 제재 아이디목록을 비교하며 매칭되는지 확인한다.
  • 매칭은 아이디를 하나씩 비교하며 길이가 같은지 먼저 보고 철자가 같은지 본다. *는 넘어간다.
  • 매칭 결과중 (a, b, c , d)(d, a, b, c)는 순서만 다르지 같은 아이디 목록이므로 set으로 변환후 answer에 있는지 확인해서 중복 순열을 제거한다.
profile
프론트엔드 & 퍼블리셔

0개의 댓글