반응형
https://leetcode.com/problems/find-eventual-safe-states
dfs 문제였습니다.
📕 풀이방법
📔 입력 및 초기화
다음 변수를 선언합니다.
📑 node별로 state를 저장할 배열을 선언합니다.
📔 풀이과정
📑 terminal node인지 검사하는 dfs를 구현합니다.
- 기저 반환값을 지정합니다: cycle이 발생한다면 말단이 아니므로 False를 아니라면 말단이므로 True를 반환합니다.
- 중간 계산값을 반환합니다: 현재 node의 state를 1로 만들어주고 이웃이 말단인지 검사해 그 중 하나라도 말단이 아니라면 False를 반환합니다.
- 이웃들이 모두 말단이므로 현 node도 말단이기 때문에 True를 반환합니다.
📑 시간 복잡도
각 node별로 한 번 씩 검사하므로 O(N) 입니다.
📑 공간 복잡도
각 node 별로 state를 관리하므로 O(N)입니다.
📔 정답 출력 | 반환
각 노드별 dfs 수행결과 말단인 node번호를 배열에 담아 반환합니다.
📕 Code
📔 Python3
class Solution:
def eventualSafeNodes(self, graph: List[List[int]]) -> List[int]:
state = [0 for _ in range(len(graph))]
def dfs(node: int) -> bool:
if state[node] > 0:
return state[node] == 2
state[node] = 1
for neighbor in graph[node]:
if not dfs(neighbor):
return False
state[node] = 2
return True
return [i for i in range(len(graph)) if dfs(i)]
*더 나은 내용을 위한 지적, 조언은 언제나 환영합니다.
'Algorithm > DFS' 카테고리의 다른 글
(Python3) - LeetCode (Medium) : 494. Target Sum (0) | 2024.12.26 |
---|---|
(C++) - LeetCode (easy) 1379. Find a Corresponding Node of a Binary Tree in a Clone of That Tree (0) | 2024.02.28 |
(C++) - LeetCode (easy) 993. Cousins in Binary Tree (0) | 2023.09.19 |
(C++) - LeetCode (easy) 965. Univalued Binary Tree (0) | 2023.09.14 |
(C++) - LeetCode (easy) 938. Range Sum of BST (0) | 2023.09.07 |