18. 괄호 변환 ( 난이도 1 )
def dfs(p):
if not p:
return ""
left = 0
right = 0
for i in range(len(p)):
if "(" == p[i]:
left += 1
else: right += 1
if right == left:
u = p[:i+1]
v = p[i+1:]
if u[0] == ")" or u[-1] == "(":
sentence = "("
if dfs(v) is not None:
sentence += dfs(v)
sentence += ")"
for j in u[1:-1]:
if j =="(":
sentence += ")"
else:
sentence += "("
return sentence
else:
return u + dfs(v)
dfs("()))((()")
15. 특정 거리의 도시 찾기( 난이도 1.5 )
나의 솔루션
from collections import deque
n , m , k, x = map(int,input().split())
graph=[]
for i in range(m):
graph.append(list(map(int,input().split())))
distance = [0] * n
def bfs(start):
queue = deque()
subqueue = deque()
xpoint_start = [item for item in graph if x == item[0]]
for s in xpoint_start:
queue.append(s)
while queue:
data = queue.popleft()
start = data[0]
end = data[1]
distance[end-1] = 1 + distance[start-1]
indexs = [index for index, item in enumerate(graph) if item[0] == end]
if indexs:
for idx in indexs:
subqueue.append(graph[idx])
if subqueue:
queue.append(subqueue.popleft)
results = [index for index, item in enumerate(distance) if item == k]
if results:
for result in results:
print(result+1)
else:
print(-1)
bfs(x)
답안
from collections import deque
n,m,k,x = map(int,input().split())
graph=[[] for _ in range(n+1)]
for _ in range(m):
a,b = map(int, input().split())
graph[a].append(b)
distance = [-1] * (n+1)
distance[x] = 0
q = deque([x])
while q:
now = q.popleft()
for next_node in graph[now]:
if distance[next_node] == -1:
distance[next_node] = distance[now] + 1
q.append(next_node)
check = False
for i in range(1,n+1):
if distance[i] == k:
print(i)
check = True
if check == False:
print(-1)
17. 경쟁적 전염
from collections import deque
n, k = map(int,input().split())
graph = []
for _ in range(n):
row = list(map(int,input().split()))
graph.append(row)
s, target_x, target_y= map(int,input().split())
initPointer = [[0, graph[x][y],x, y] for x in range(n) for y in range(n) if graph[x][y] != 0]
initPointer.sort()
queue = deque(initPointer)
dy=[-1,1,0,0]
dx=[0,0,-1,1]
while queue:
t, virus, x, y = queue.popleft()
if t == s:
break;
for i in range(4):
ny = y + dy[i]
nx = x + dx[i]
if(ny >= n or nx >= n or nx < 0 or ny < 0 ):
continue
else:
if graph[nx][ny] == 0:
graph[nx][ny] = virus
queue.append([t+1,virus, nx,ny])
print(graph[target_x-1][target_y-1])