https://programmers.co.kr/learn/courses/30/lessons/64064?language=python3
풀이
유저 ID를 불량 아이디 개수에 맞게 조합하여 탐색
- 매칭되는 유저와 불량 아이디의 길이가 같아야함
- 불량 사용자와 유저의 문자를 비교
- 불량 사용자의 문자가 '*'이 아니라면 유저와 같은 문자여야함
* 위의 조건에 부합하고 현재 조합된 유저 아이디가 List에 없다면 List에 추가
from itertools import permutations
def isMatch(candidate, banned_id):
# 문자마다 비교
for i in range(len(candidate)):
if banned_id[i]=='*':continue
# 불량 사용자의 문자가 *이 아니고 아이디가 다르면 False
elif (banned_id[i] != candidate[i]):
return False
return True
def check(candidate, banned_id):
# 조합에 따른 유저 ID의 후보와 불량 사용자 아이디 각각을 비교
for i in range(len(banned_id)):
# 불량 사용자와 유저의 아이디 길이가 다르면 false
if len(candidate[i])!=len(banned_id[i]):
return False
# 길이가 같다면 해당 쌍을 비교
if isMatch(candidate[i], banned_id[i]) is False:
return False
return True
def solution(user_id, banned_id):
answer = []
for candidate in permutations(user_id, len(banned_id)):
if check(candidate, banned_id) is True:
res=set(candidate)
if res not in answer:
answer.append(res)
return len(answer)
'알고리즘' 카테고리의 다른 글
BOJ 14889 - 스타트와 링크(C++) (0) | 2021.10.05 |
---|---|
BOJ 1912 - 연속합(C++) (0) | 2021.10.05 |
Programmers - 복서 정렬하기(C++) (0) | 2021.10.04 |
Programmers - 모음사전(Python) (0) | 2021.09.29 |
BOJ 3190 - 뱀(C++) (0) | 2021.09.29 |
댓글