# 방향은 오른쪽, 아래, 왼쪽, 위 순으로 진행한다.
D, DR, DC = 4, [0,1,0,-1], [1,0,-1,0]
def solution(rows, columns, queries):
g = graph(rows, columns)
return [bfs(g,x1-1,y1-1,x2-1,y2-1) for (x1,y1,x2,y2) in queries]
# 행과 열에 맞는 그래프를 찍어낸다.
def graph(rows, columns):
g = []
for i in range(rows):
g.append([i*columns+j for j in range(1, columns+1)])
return g
# 귀퉁이를 돌면서 탐색한다.
def bfs(g,x1,y1,x2,y2):
d, minimum, pushed = 0, g[x1][y1], g[x1][y1]
nx, ny = x1, y1
for _ in range((x2-x1+1)*2+(y2-y1+1)*2-4):
nx, ny = nx+DR[d], ny+DC[d]
minimum = min(minimum, g[nx][ny])
# 귀퉁이에 도달하면 방향을 전환한다.
if (nx==x1 and ny==y2) or (nx==x2 and ny==y2) or (nx==x2 and ny==y1):
d += 1
pushed, g[nx][ny] = g[nx][ny], pushed
return minimum
Leave a comment