[Programmers] 외벽점검*****

김가영·2021년 2월 23일
0

Algorithm

목록 보기
62/78
post-thumbnail
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 에 list나 set을 추가할 수 없다는 게 아쉬웠는데 tuple()로 바꿔주면 set 을 쓸 수 있었다!
굳이 새로운 리스트를 만든 후 v = new 로 재할당할 필요 없이 len(v) 만큼 popleft 해주는 방법도 있었다. 신기

profile
개발블로그

0개의 댓글