honey_pot

[Python] 불량 사용자 본문

문제 풀이

[Python] 불량 사용자

_tera_ 2022. 9. 23. 19:00

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