diff --git "a/\354\235\264\354\212\271\355\230\204/3\354\243\274\354\260\250/\352\262\275\354\243\274\353\241\234\352\261\264\354\204\244.py" "b/\354\235\264\354\212\271\355\230\204/3\354\243\274\354\260\250/\352\262\275\354\243\274\353\241\234\352\261\264\354\204\244.py" new file mode 100644 index 0000000..6fe22ed --- /dev/null +++ "b/\354\235\264\354\212\271\355\230\204/3\354\243\274\354\260\250/\352\262\275\354\243\274\353\241\234\352\261\264\354\204\244.py" @@ -0,0 +1,14 @@ +from collections import deque +def solution(board): + def bfs(s): + q, n = deque([s]), len(board) + dirs, vis = [(-1,0),(0,1),(1,0),(0,-1)], [[1e9] * n for _ in range(n)] + while q: + r, c, d, cost = q.popleft() + for i, (dr, dc) in enumerate(dirs): + nr, nc, ncost= r + dr, c + dc, 500 * ( i != d ) + 100 + cost + if 0 <= nr < n and 0 <= nc < n and board[nr][nc] == 0 and ncost < vis[nr][nc]: + vis[nr][nc] = ncost + q.append((nr, nc, i, ncost)) + return vis[-1][-1] + return min(bfs((0,0,1,0)), bfs((0,0,2,0))) \ No newline at end of file diff --git "a/\354\235\264\354\212\271\355\230\204/3\354\243\274\354\260\250/\353\204\244\355\212\270\354\233\214\355\201\254.py" "b/\354\235\264\354\212\271\355\230\204/3\354\243\274\354\260\250/\353\204\244\355\212\270\354\233\214\355\201\254.py" new file mode 100644 index 0000000..0bc3756 --- /dev/null +++ "b/\354\235\264\354\212\271\355\230\204/3\354\243\274\354\260\250/\353\204\244\355\212\270\354\233\214\355\201\254.py" @@ -0,0 +1,9 @@ +def solution(n, computers): + p = list(range(n)) + def union_find(i): + if p[i] != i : p[i] = union_find(p[i]) + return p[i] + for r in range(n): + for c in range(n): + if computers[r][c]: p[union_find(c)] = union_find(r) + return len({union_find(i) for i in range(n)}) \ No newline at end of file diff --git "a/\354\235\264\354\212\271\355\230\204/3\354\243\274\354\260\250/\353\254\264\354\235\270\353\217\204\354\227\254\355\226\211.py" "b/\354\235\264\354\212\271\355\230\204/3\354\243\274\354\260\250/\353\254\264\354\235\270\353\217\204\354\227\254\355\226\211.py" new file mode 100644 index 0000000..6074b34 --- /dev/null +++ "b/\354\235\264\354\212\271\355\230\204/3\354\243\274\354\260\250/\353\254\264\354\235\270\353\217\204\354\227\254\355\226\211.py" @@ -0,0 +1,15 @@ +def solution(maps): + vis, R, C = set(), len(maps), len(maps[0]) + dirs = [(-1,0),(1,0),(0,-1),(0,1)] + ok = lambda r,c: maps[r][c] != "X" and (r,c) not in vis + def dfs(stack, s): + while stack: + r, c = stack.pop() + s += int(maps[r][c]) + for dr, dc in dirs: + nr, nc = r + dr, c + dc + if 0 <= nr < R and 0 <= nc < C and ok(nr, nc): + vis.add((nr, nc)) + stack.append((nr, nc)) + return s + return sorted(dfs([(r,c)], 0) for r in range(R) for c in range(C) if ok(r, c) and not vis.add((r,c))) or [-1] \ No newline at end of file diff --git "a/\354\235\264\354\212\271\355\230\204/3\354\243\274\354\260\250/\353\257\270\353\241\234\355\203\210\354\266\234.py" "b/\354\235\264\354\212\271\355\230\204/3\354\243\274\354\260\250/\353\257\270\353\241\234\355\203\210\354\266\234.py" new file mode 100644 index 0000000..de8e98e --- /dev/null +++ "b/\354\235\264\354\212\271\355\230\204/3\354\243\274\354\260\250/\353\257\270\353\241\234\355\203\210\354\266\234.py" @@ -0,0 +1,16 @@ +from collections import deque +def solution(maps): + visit = {maps[r][c]: (r, c) for r in range(len(maps)) for c in range(len(maps[0])) if maps[r][c] in "SEL"} + d, R, C = [(-1, 0), (0, -1), (1, 0), (0, 1)], len(maps), len(maps[0]) + def bfs(start, end): + q, visited =deque([(*start, 0)]), set(start) + while q: + r, c, time = q.popleft() + for dr, dc in d: + nr, nc = r + dr, c + dc + if 0 <= nr < R and 0 <= nc < C and (nr, nc) not in visited and maps[nr][nc] != "X": + if maps[nr][nc] == end: return time + 1 + visited.add((nr, nc)) + q.append((nr, nc, time + 1)) + return 0 + return (a + b) if (a := bfs(visit["S"], "L")) and (b := bfs(visit["L"], "E")) else -1 \ No newline at end of file diff --git "a/\354\235\264\354\212\271\355\230\204/3\354\243\274\354\260\250/\354\227\254\355\226\211\352\262\275\353\241\234.py" "b/\354\235\264\354\212\271\355\230\204/3\354\243\274\354\260\250/\354\227\254\355\226\211\352\262\275\353\241\234.py" new file mode 100644 index 0000000..aadf935 --- /dev/null +++ "b/\354\235\264\354\212\271\355\230\204/3\354\243\274\354\260\250/\354\227\254\355\226\211\352\262\275\353\241\234.py" @@ -0,0 +1,9 @@ +from collections import defaultdict +def solution(tickets): + routes, stack, path = defaultdict(list), ["ICN"], [] + for dep, arr in tickets: routes[dep].append(arr) + for dests in routes.values(): dests.sort(reverse=True) + while stack: + if routes[stack[-1]]: stack.append(routes[stack[-1]].pop()) + else: path.append(stack.pop()) + return path[::-1] \ No newline at end of file