[プログラマー]不良ユーザー(Python)

6495 ワード

Link
https://programmers.co.kr/learn/courses/30/lessons/64064
My Solution
def str_equal(user_id, banned_id):
    if len(user_id) != len(banned_id):
        return False
    
    for i in range(len(user_id)):
        if user_id[i] == banned_id[i] or banned_id[i] == '*':
            continue
        else:
            return False

    return True


def solution(user_id, banned_id):
    count = 0
    solutions = []
    def dfs(user, banned, sol):
        if len(banned) == 0:
            solutions.append(tuple(sorted(sol)))
            return
        
        for i in range(len(user)):
            if str_equal(user[i], banned[0]):
                temp_b = banned.pop(0)
                temp_u = user.pop(i)
                sol.append(temp_u)
                dfs(user, banned, sol)
                sol.remove(temp_u)
                user.insert(i, temp_u)
                banned.insert(0, temp_b)
                    
    dfs(user_id, banned_id, [])
    
    return len(set(solutions))
DFSで解決したので、もっと練習する必要があるかもしれません.挿入を無効にしたときに元の位置を挿入しなかったことによるエラーのため、時間がかかりました.