코딩테스트 연습 - 불량 사용자 | 프로그래머스 (programmers.co.kr)
상당한 고민을 하게 만들었던 문제이다..
최대한의 효율로 풀고자 노렸했었으나. 결국 마지막 관문에서 순열조합을 어찌 사용할지 고민하다가.. 결국 permutations를 사용해서 모든 경우의 수를 다 탐색하기로 변경했다..
첫번째 풀이..
import re
from collections import defaultdict
import itertools
def solution(user_id, banned_id):
answer = 1
bands=list(map(lambda x:x.replace('*','.'), banned_id))
tmpdic=defaultdict(list)
diccnt={}
for band in bands:
comp = re.compile(band)
for user in user_id:
if comp.match(user) and len(band)==len(user):
tmpdic[band].append(user)
if diccnt.get(band): diccnt[band]+=1
else: diccnt[band]=1
print(tmpdic)
print(diccnt)
for key in tmpdic.keys():
list(itertools.combinations(tmpdic[key], diccnt[key]))
return answer
# user_id, banned_id=["frodo", "fradi", "crodo", "abc123", "frodoc"],["fr*d*", "abc1**"] #2
# user_id, banned_id=["frodo", "fradi", "crodo", "abc123", "frodoc"],["*rodo", "*rodo", "******"] #2
user_id, banned_id=["frodo", "fradi", "crodo", "abc123", "frodoc"],["fr*d*", "*rodo", "******", "******"] #3
solution(user_id,banned_id)
이 이후의 과정에서 막혔따..
문제는, 몇개의 banned_id 가 등장할 지 모르는 상황에서, 이것을 제대로 이어나가지 못하였다..
그리하여, 순열을 활용했따..
import re
import itertools
def solution(user_id, banned_id):
# answer = 0
permu = list(itertools.permutations(user_id, len(banned_id)))
bands=list(map(lambda x:x.replace('*','.'), banned_id))
comps=[]
for band in bands:
comps.append([len(band),re.compile(band)])
tmp=[]
for perm in permu:
if check(comps,perm):
perm = set(perm)
if set(perm) not in tmp:
tmp.append(perm)
# print(tmp)
return len(tmp)
def check(comps,perm):
for comp, user in zip(comps,perm):
if comp[1].match(user)==None or comp[0]!=len(user):
return False
return True
user_id, banned_id=["frodo", "fradi", "crodo", "abc123", "frodoc"],["fr*d*", "abc1**"] #2
# user_id, banned_id=["frodo", "fradi", "crodo", "abc123", "frodoc"],["*rodo", "*rodo", "******"] #2
# user_id, banned_id=["frodo", "fradi", "crodo", "abc123", "frodoc"],["fr*d*", "*rodo", "******", "******"] #3
solution(user_id,banned_id)
'CODING TEST' 카테고리의 다른 글
2021 Dev-Matching: 웹 백엔드 개발자 (상반기) 행렬 테두리 회전하기 파이썬 (0) | 2021.06.18 |
---|---|
이코테 _ 떡볶이떡 (0) | 2021.06.18 |
파이썬 Python KAKAO_2018 캐시 (0) | 2021.06.16 |
파이썬 Python KAKAO_2018 파일명 정렬 (0) | 2021.06.15 |
이코테-음료수 얼려먹기 (0) | 2021.06.10 |