honey_pot
[Python] 불량 사용자 본문
https://school.programmers.co.kr/learn/courses/30/lessons/64064
확실히 3단계라 아이디어를 떠올리는 게 어렵다
re.sub를 이용해서 banned_id 내의 문자열 * 를 변경하긴 했는데 . 으로 변경해서 정규식의 아무 문자 1개를 의미하는 카드로 이용하는 건 생각 못했다
user_id 나 banned_id 길이가 8 이하라 순열 permutations를 써도 시간 초과가 나지 않는 점을 캐치했으면 더 수월했을 것이다
순서를 허용하지 않는 순열로 풀어야 하기 때문에 아이디를 정렬을 해주는 부분이 있어야 한다.
list -> set 하는 방식은 거의 매번 검색하는 것 같다 ㅋㅋㅋㅋㅋㅋㅋ list..map...tuple... 기억하자
len 메소드로 길이 구해도 되는데 괄호가 너무 많아서 틀리면 헷갈릴까봐 __len__() 으로 썼다
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
from itertools import permutations
import re
def solution(user_id, banned_id):
answer = []
banned_id = [re.sub('\*','.',b) for b in banned_id]
for p in list(permutations(user_id,len(banned_id))):
tmp = []
for i in range(len(banned_id)):
f = re.match(banned_id[i],p[i])
if f and len(banned_id[i]) == len(p[i]):
tmp.append(f.group())
if len(tmp) == len(banned_id):
answer.append(sorted(p))
return set(list(map(tuple,answer))).__len__()
|
cs |
'문제 풀이' 카테고리의 다른 글
[Python] 섬 연결하기 (0) | 2022.09.28 |
---|---|
[Python] 보석 쇼핑 (1) | 2022.09.23 |
[Python] 단속카메라 (0) | 2022.09.23 |
[python] 가장 긴 팰린드롬 (1) | 2022.09.23 |
[python] 등굣길 (0) | 2022.09.23 |
Comments