[Programmers]外壁****を確認する


from collections import deque

def solution(n, weak, dist):
    dist.sort(reverse=True)
    q = deque([weak])
    visited = set()
    visited.add(tuple(weak))
    for i in range(len(dist)):
        d = dist[i]
        for _ in range(len(q)):
            current = q.popleft()
            for p in current:
                l = p
                r = (p + d) % n
                if l < r:
                    temp = tuple(filter(lambda x: x < l or x > r, current))
                else:
                    temp = tuple(filter(lambda x: x < l and x > r, current))

                if len(temp) == 0:
                    return (i + 1)
                elif temp not in visited:
                    visited.add(temp)
                    q.append(list(temp))
    return -1
  • には学ぶべきところがたくさんあります.
    右に向かって左に向かって考えるべきだと思いますが、そうしなければならない必要はありません.すべての点から出発するので、一つの方向に考えればいいです!
  • setにリストやsetを追加できないのは残念ですが、tuple()に変えればsetが使えます!
    新しいリストを作成してから、v = newに再割り当てせずにlen(v)をポップアップする方法もあります.顔つき