코딩테스트

[프로그래머스][KAKAO_인턴][2019] 불량 사용자

pythaac 2021. 9. 8. 04:33
프로그래머스 코딩테스트 고득점 Kit의 문제입니다.

https://programmers.co.kr/learn/challenges?tab=algorithm_practice_kit

 

코딩테스트 연습

기초부터 차근차근, 직접 코드를 작성해 보세요.

programmers.co.kr

 

문제

https://programmers.co.kr/learn/challenges

 

코딩테스트 연습

기초부터 차근차근, 직접 코드를 작성해 보세요.

programmers.co.kr

 

내가 작성한 코드

import re
from collections import defaultdict

def set_tuple(candidates, d, crnt, result):
    for id in candidates[d]:
        if id not in crnt:
            crnt.append(id)
            if d == len(candidates)-1:
                result.append(crnt[:])
            else:
                set_tuple(candidates, d+1, crnt, result)
            crnt.pop()

def solution(user_id, banned_id):
    answer = 0
    candidates = []
    for banned in banned_id:
        pattern = re.compile("^" + re.sub("\*", ".", banned) + "$")
        crnt = []
        for id in user_id:
            if re.search(pattern, id):
                crnt.append(id)
        candidates.append(crnt)

    comb = []
    set_tuple(candidates, 0, [], comb)
    check = defaultdict(bool)
    for res in comb:
        res = frozenset(res)
        if len(res) == len(banned_id) and not check[res]:
            check[res] = True
            answer += 1

    return answer
  • brute-force
    • banned id에 해당하는 id를 모두 색출
    • 가능한 모든 id의 조합에 대해 중복되는 조합 제외하고 카운팅

 

다른 사람이 작성한 코드

None

 

기억해야할 것

  • brute-force를 떠올리는 것이 힘든 것 같다
    • 무언가 다른 방법이 있을 거라 생각하면 시간을 많이 소모했다
    • 중복이 제거된 집합이나 조합 방법을 도출하고 싶어했다