[LeetCode] 841. Keys and Rooms
📃 문제 설명
(MEDIUM) https://leetcode.com/problems/keys-and-rooms/
- n개의 방이 존재하고 각 방에는 타 방들을 열 수 있는 열쇠들이 존재할 때, 0번 방만이 열려 있을 때 모든 방들에 대한 방문이 가능한지를 물어보는 문제이다.
🔎 문제 접근
- BFS로 접근하되, 해당 방을 여러 번 접근하지 않도록
is_visited
라는 변수를 통해 체크해주었다. - 다음에 visit할 방의 목록은 queue를 통해 관리해주었다.
- 답 출력 속도를 빨리 하기 위해, 아직 방문하지 않은 방들의 갯수를 세는
visited_left
변수를 만들어, 해당 변수가 0일 때 True, 아닐 때 False를 출력하도록 작성해주었다.
✨ 문제 풀이
from collections import deque
class Solution:
def canVisitAllRooms(self, rooms: List[List[int]]) -> bool:
N = len(rooms)
is_visited = [False] * N
is_visited[0] = True #0번 방은 곧 들릴 예정
visited_left = N - 1 #0번 방 제외 다른 방들은 들리지 않음
q = deque([0]) #0번 방을 가장 처음으로 들릴 queue 제작
#들릴 방이 남아 있을 때까지 반복, 이미 모든 방 방문했으면 break
while len(q) and visited_left:
now = q.popleft()
#현재 방에서 들릴 수 있는 다음 방들에 대해 is_visited 체크
for key in rooms[now]:
if not is_visited[key]:
is_visited[key] = True
visited_left -= 1
q.append(key)
return False if visited_left else True
- Runtime과 Memory Usage가 모두 준수하다. 개선 가능한 방법이 생각나지는 않는다.
Author And Source
이 문제에 관하여([LeetCode] 841. Keys and Rooms), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@robotroniq/LeetCode-841.-Keys-and-Rooms저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)