[프로그래머스] 불량 사용자
문제
- 개인정보 보호를 위해 사용자 아이디 중 일부 문자를 '*' 문자로 가려서 전달
제재 아이디
: 불량 사용자 목록에 매핑된 응모자 아이디
이벤트 응모자 아이디 목록이 담긴 배열 user_id와 불량 사용자 아이디 목록이 담긴 배열 banned_id가 매개변수로 주어질 때, 당첨에서 제외되어야 할 제재 아이디 목록은 몇 가지 경우의 수가 가능한지 return 하도록 solution 함수를 완성해주세요.
제한사항
- user_id 배열의 크기는 1 이상 8 이하입니다.
- user_id 배열 각 원소들의 값은 길이가 1 이상 8 이하인 문자열입니다.
- 응모한 사용자 아이디들은 서로 중복되지 않습니다.
- 응모한 사용자 아이디는 알파벳 소문자와 숫자로만 구성되어 있습니다.
- banned_id 배열의 크기는 1 이상 user_id 배열의 크기 이하입니다.
- banned_id 배열 각 원소들의 값은 길이가 1 이상 8 이하인 문자열입니다.
- 불량 사용자 아이디는 알파벳 소문자와 숫자, 가리기 위한 문자 '*'로만 이루어져 있습니다.
- 불량 사용자 아이디는 '*' 문자를 하나 이상 포함하고 있습니다.
- 불량 사용자 아이디 하나는 응모자 아이디 중 하나에 해당하고 같은 응모자 아이디가 중복해서 제재 아이디 목록에 들어가는 경우는 없습니다.
- 제재 아이디 목록들을 구했을 떄 아이디들이 나열된 순서와 관계없이 아이디 목록의 내용이 동일하다면 같은 것으로 처리하여 하나로 세면 됩니다.
코드
from copy import deepcopy
def solution(user_id, banned_id):
answer = []
maps = {}
for ban in banned_id:
if ban not in maps:
for user in user_id:
if check(ban, user):
if ban in maps:
maps[ban].append(user)
else:
maps[ban] = [user]
solve(maps, 0, [], banned_id, len(banned_id), answer)
return len(answer)
def check(ban, user):
if len(ban) != len(user):
return False
for w in range(len(ban)):
if ban[w] != user[w] and ban[w] != '*':
return False
return True
def solve(maps, index, result, banned_id, length, answer):
if index == length:
tmp = sorted(deepcopy(result))
if tmp not in answer:
answer.append(tmp)
return
for m in maps[banned_id[index]]:
if m not in result:
result.append(m)
solve(maps, index+1, result, banned_id, length, answer)
result.pop()
Author And Source
이 문제에 관하여([프로그래머스] 불량 사용자), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@haman/프로그래머스-불량-사용자저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)