도비LOG(跳飛錄)

도비의 AI 엔지니어 도전기

알고리즘

[프로그래머스 불량 사용자] 파이썬 풀이

나쁜도비 2023. 6. 1. 10:54

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

문제 요약

응모자 아이디 배열 user_id와, 일부를 *로 가린 불량 사용자 배열 banned_id이 주어졌을 때, 제제 아이디 목록은 몇 가지 경우의 수가 가능한지를 return


풀이

permutation을 활용한다. 먼저, user_id에서 banned_id의 원소 수만큼 가능한 순열을 모두 구한다. 그리고 구해진 각 순열들을 순회하면서, 해당 순열 내의 user_idbanned_id에 해당될 가능성이 있는 경우, 그 순열에서 중복을 제거한 뒤 answer에 추가해준다.
마지막으로 answer의 길이를 리턴해준다.
check 함수는 user의 id가 banned_id에 해당되는지의 여부를 판별한다. 둘의 길이가 동일하고, *를 제외한 나머지 부분이 모두 동일하다면 True를 리턴한다.

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)
728x90