[Programmers] 불량 사용자
Updated:
불량 사용자
불량 사용자 를 클릭하면 바로 이동한다.
먼저 제재 아이디 별 제재 할 수 있는 유저 아이디를 구한다. 그리고 제재 아이디 별 제재 할 유저 아이디 순열을 구한다.
순열을 돌면서 제재 아이디가 모두 제재 할 수 있는 경우라면 중복을 제외하기 위해 집합으로 바꾼뒤 정답에 추가한다.
마지막으로 정답의 길이를 반환하면 된다.
from itertools import permutations
def make_ban_list(user_id, banned_id):
# 제재 아이디 별 제재 가능한 유저 아이디 리스트
ban_id_list = []
for ban in banned_id:
# 제재 가능한 유저 아이디를 담을 리스트
ban_list = []
# 제재 아이디로 제재가 가능한 아이디인지 검사한다
for user in user_id:
if len(ban) == len(user):
isBanned = True
for i, j in zip(user, ban):
# 제재할 수 없는 아이디라면 멈춘다
if j != '*' and i != j:
isBanned = False
break
# 제재할 수 있는 아이디라면 추가한다
if isBanned:
ban_list.append(user)
ban_id_list.append(ban_list)
return ban_id_list
def solution(user_id, banned_id):
# 1. 제재 아이디 별 제재가 가능한 유저 아이디 목록을 구한다
ban_id_list = make_ban_list(user_id, banned_id)
answer = []
# 2. 제재 아이디 별 제재를 할 유저 아이디 순열을 구한다
for users in permutations(user_id, len(banned_id)):
flag = True
for user, ban_list in zip(users, ban_id_list):
# 3. 제재 아이디가 제재를 할 수 없는 유저 아이디라면 멈춘다
if user not in ban_list:
flag = False
break
# 4. 모두 제재를 할 수 있는 유저라면 중복 방지를 위해 집합으로 바꾼 뒤 정답에 추가한다
users = set(users)
if flag and users not in answer:
answer.append(users)
return len(answer)
if __name__ == "__main__":
user_id = ["frodo", "fradi", "crodo", "abc123", "frodoc"]
banned_id = ["fr*d*", "*rodo", "******", "******"]
print(solution(user_id, banned_id))
Leave a comment