일상용/연습장
[leetcode] 3-10회차
alpakaka
2025. 6. 2. 14:38
책을 샀다. 행복하다.
https://leetcode.com/problems/course-schedule-ii/?envType=study-plan-v2&envId=top-interview-150
class Solution(object):
def findOrder(self, numCourses, prerequisites):
"""
:type numCourses: int
:type prerequisites: List[List[int]]
:rtype: List[int]
"""
self.graph = collections.defaultdict(list)
self.res = []
for pair in prerequisites:
self.graph[pair[0]].append(pair[1])
self.visited = [0 for x in xrange(numCourses)]
for x in xrange(numCourses):
if not self.DFS(x):
return []
return self.res
def DFS(self, node):
if self.visited[node] == -1:
return False
if self.visited[node] == 1:
return True
self.visited[node] = -1
for x in self.graph[node]:
if not self.DFS(x):
return False
self.visited[node] = 1
self.res.append(node)
return True
어제 풀었던 문제와 크게 다르지 않은 문제였다.
class Solution(object):
def snakesAndLadders(self, board):
"""
:type board: List[List[int]]
:rtype: int
"""
n = len(board)
min_rolls = [-1] * (n * n + 1)
q = deque()
min_rolls[1] = 0
q.append(1)
while q:
x = q.popleft()
for i in range(1, 7):
t = x + i
if t > n * n:
break
row = (t-1) //n
col = (t-1) % n
v = board[n-1 - row][(n-1-col) if (row % 2 ==1) else col]
y =v if v > 0 else t
if y == n * n:
return min_rolls[x] + 1
if min_rolls[y] == -1:
min_rolls[y] = min_rolls[x] + 1
q.append(y)
return -1