Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 14 additions & 0 deletions 이승현/3주차/경주로건설.py
Original file line number Diff line number Diff line change
@@ -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)))
9 changes: 9 additions & 0 deletions 이승현/3주차/네트워크.py
Original file line number Diff line number Diff line change
@@ -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)})
15 changes: 15 additions & 0 deletions 이승현/3주차/무인도여행.py
Original file line number Diff line number Diff line change
@@ -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]
16 changes: 16 additions & 0 deletions 이승현/3주차/미로탈출.py
Original file line number Diff line number Diff line change
@@ -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
9 changes: 9 additions & 0 deletions 이승현/3주차/여행경로.py
Original file line number Diff line number Diff line change
@@ -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]