[프로그래머스] Lv.3 불량 사용자

siwoo jang·2024년 5월 3일

DFS = 가능한 모든 조합을 만들고 유효한 조합을 찾는 것
탐색과 구현 = 조합(combinations) + 순열(permutations)

  • permutations(data, n) 은 iterable 객체에서 n 개의 데이터를 뽑아
    일렬로 나열하는 모든 경우(순열)를 계산

  • check 함수는 user의 id가 banned_id에 해당되는지의 여부를 판별

  • zip은 interable에 여러 interable 객체를 2개이상 넘겨 처리 가능
    zip 주의사항 : 함수로 넘길때 인자의 길이를 똑같이 해야됨.
    set은 배열을 넣을시에 중복제거를 해준다

#https://bongseok.tistory.com/66

from itertools import permutations
def solution(user_id, banned_id):
    def check(user,ban):
        if len(user)==len(ban):
            for i,j in zip(user,ban):
                if j=='*':
                    continue
                elif i != j:
                    return False
        else:
            return False
        return True
    answer = []
    for permu in permutations(user_id,len(banned_id)):
        flag = True
        for i in range(len(banned_id)):
            if not check(permu[i],banned_id[i]):
                flag = False
        if flag:
            if set(permu) not in answer:
                answer.append(set(permu))
    return len(answer)

check 함수는 user id가 banned id에 해당하는지 여부를 판별,
길이가 같고, *를 제외한 요소가 같으면 True 반환

permutation 함수를 사용해 user id에서 banned id의 길이만큼 가능한 순열을 모두 구하고,
각 순열 순회하면서 flag가 True가 됐다면 set으로 순열에서 중복을 제거한 후 answer에 추가
마지막으로 answer의 길이 반환

profile
프론트/백엔드 개발자입니다

0개의 댓글