ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 불량 사용자
    코딩 테스트/Level 3 2020. 10. 9. 16:05
    반응형

    불량 사용자
    2019 카카오 개발자 겨울 인턴십 
    1336명 완료
     
    https://programmers.co.kr/learn/courses/30/lessons/64064

     

    코딩테스트 연습 - 불량 사용자

    개발팀 내에서 이벤트 개발을 담당하고 있는 무지는 최근 진행된 카카오이모티콘 이벤트에 비정상적인 방법으로 당첨을 시도한 응모자들을 발견하였습니다. 이런 응모자들을 따로 모아 불량 ��

    programmers.co.kr

    8개밖에 안되기 때문에 전수조사(brute force)로 해결 가능.

    def solution(user_id, banned_id):
        from re import compile, match
        from itertools import permutations
        for index, banned in enumerate(banned_id):
            banned_id[index] = compile(f"{banned.replace('*', '.')}$")
        passed = set()
        for candidate in permutations(user_id, len(banned_id)):
            for index, each in enumerate(candidate):
                if not banned_id[index].match(each):
                    break
            else:
                passed.add(tuple(sorted(candidate)))
        return len(passed)
    테스트 1 〉	통과 (0.10ms, 10.8MB)
    테스트 2 〉	통과 (0.63ms, 10.7MB)
    테스트 3 〉	통과 (0.29ms, 10.6MB)
    테스트 4 〉	통과 (0.24ms, 10.7MB)
    테스트 5 〉	통과 (125.25ms, 10.6MB)
    테스트 6 〉	통과 (15.68ms, 10.7MB)
    테스트 7 〉	통과 (1.02ms, 10.8MB)
    테스트 8 〉	통과 (0.71ms, 10.7MB)
    테스트 9 〉	통과 (1.18ms, 10.7MB)
    테스트 10 〉	통과 (20.21ms, 10.7MB)
    테스트 11 〉	통과 (1.66ms, 10.6MB)

    조합으로 해결하려고 노오력했으나..  
    pr*do, pr**do 가 있을 때 등등에서 머리가 복잡해짐..
    전수 조사 한 번 돌렸더니.. 머리가 맑아짐...

    한 줄로..

    from itertools import permutations
    from re import compile
    
    
    def solution(user_id, banned_id):
        return len(set(tuple(sorted(candidate)) for candidate in permutations(user_id, len(banned_id)) if
                       len(banned_id) == len(
                           [True for index, each in enumerate(candidate) if
                            [compile(f"{banned.replace('*', '.')}$") for banned in banned_id][index].match(each)])))
    
    테스트 1 〉	통과 (0.10ms, 10.6MB)
    테스트 2 〉	통과 (13.62ms, 10.7MB)
    테스트 3 〉	통과 (1.71ms, 10.8MB)
    테스트 4 〉	통과 (1.07ms, 10.6MB)
    테스트 5 〉	통과 (1801.67ms, 10.8MB)
    테스트 6 〉	통과 (522.44ms, 10.6MB)
    테스트 7 〉	통과 (20.48ms, 10.6MB)
    테스트 8 〉	통과 (10.44ms, 10.8MB)
    테스트 9 〉	통과 (20.49ms, 10.6MB)
    테스트 10 〉	통과 (1762.69ms, 10.7MB)
    테스트 11 〉	통과 (46.99ms, 10.7MB)

    두 줄로..

    from itertools import permutations
    from re import compile
    
    
    def solution(user_id, banned_id):
        compiled = [compile(f"{banned.replace('*', '.')}$") for banned in banned_id]
        return len(set(tuple(sorted(candidate)) for candidate in permutations(user_id, len(banned_id)) if
                       len(banned_id) == len(
                           [True for index, each in enumerate(candidate) if
                            compiled[index].match(each)])))
    테스트 1 〉	통과 (0.09ms, 10.7MB)
    테스트 2 〉	통과 (1.49ms, 10.7MB)
    테스트 3 〉	통과 (0.42ms, 10.6MB)
    테스트 4 〉	통과 (0.33ms, 10.7MB)
    테스트 5 〉	통과 (136.71ms, 10.6MB)
    테스트 6 〉	통과 (43.07ms, 10.7MB)
    테스트 7 〉	통과 (2.64ms, 10.7MB)
    테스트 8 〉	통과 (1.46ms, 10.7MB)
    테스트 9 〉	통과 (2.70ms, 10.7MB)
    테스트 10 〉	통과 (97.33ms, 10.8MB)
    테스트 11 〉	통과 (4.76ms, 10.7MB)
    반응형
Designed by Tistory.