less than 1 minute read

1. 개요

2. 풀이

# 방향은 오른쪽, 아래, 왼쪽, 위 순으로 진행한다.
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