본문 바로가기
ALGORITHM/PROGRAMMERS

[PG/Python] 불량 사용자

by 안녕나는현서 2021. 12. 8.
728x90

📌 문제

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

 

코딩테스트 연습 - 불량 사용자

개발팀 내에서 이벤트 개발을 담당하고 있는 "무지"는 최근 진행된 카카오이모티콘 이벤트에 비정상적인 방법으로 당첨을 시도한 응모자들을 발견하였습니다. 이런 응모자들을 따로 모아 불량

programmers.co.kr

 

📌 문제 접근 방법

  1. banned_id를 하나씩 순회하며 banned_id가 될 수 있는 후보 리스트를 able_banned에 저장했다.
  2. 후보 리스트를 하나씩 순회하며 재귀를 이용해서 불량 사용자 리스트를 만들었다.
  3. 중복을 체크해주기 위해서 sort한 후 answer에 저장했다.
  4. 불량 사용자 리스트의 경우의 수가 저장된 answer의 길이를 반환한다.

 

📌 코드

# 프로그래머스 불량 사용자
def is_same(id1, id2):
    for i in range(len(id1)):
        if id1[i] == '*':
            pass
        elif id1[i] != id2[i]:
            return False
    
    return True


def solution(user_id, banned_id):
    able_banned = []
    for b_id in banned_id:
        temp = []
        for u_id in user_id:
            if len(b_id) == len(u_id) and is_same(b_id, u_id):
                temp.append(u_id)
        able_banned.append(temp)
    
    N = len(able_banned)
    answer = []

    def pick_id(n, temp):
        if n == N:
            temp.sort()
            if temp not in answer:
                answer.append(temp)
            return

        for id in able_banned[n]:
            if n == 0:
                pick_id(n+1, [id])
            elif id not in temp:
                pick_id(n+1, temp+[id])
    
    pick_id(0, [])
        
    return len(answer)
728x90

'ALGORITHM > PROGRAMMERS' 카테고리의 다른 글

[PG/Python] 가장 먼 노드  (0) 2021.12.09
[PG/Python] 기능개발  (0) 2021.12.09
[PG/Python] 큰 수 만들기  (0) 2021.12.02
[PG/Python] 멀쩡한 사각형  (0) 2021.12.01
[PG/Python] 괄호 변환  (0) 2021.11.30

댓글