x1,y1,x2,y2
를 받고 주어진 그래프를 회전하며 가장 작은 값을 저장하는 문제입니다.
가장 핵심은 행렬을 회전하는 부분을 어떻게 구현하냐 인데, 저 같은 경우 방향 변수 d
를 놓고 4가지 방향을 모두 끝내면 종료하는 식으로 구현했고, 다른 방식이 있다면 각 변마다 for문을 사용하여 끝낼 수 있는 방식이 있으니 구현하기 쉬운 것으로 택하시면 됩니다.
파이썬은 graph[x][y], tmp = tmp, graph[x][y]
와 같이 두 변수의 값을 제 3의 변수 없이 맞바꿀 수 있기 때문에 유용하게 사용할 수 있습니다.
def rotate(x1, y1, x2, y2, graph, answer):
# 오른쪽, 아래, 왼쪽, 위 순
dx = 0, 1, 0, -1
dy = 1, 0, -1, 0
d, x, y, tmp = 0, x1, y1, 10000
min_val = 10000
while d < 4:
nx = x + dx[d]
ny = y + dy[d]
min_val = min(min_val, graph[x][y])
# 범위 안인 경우
if x1 <= nx <= x2 and y1 <= ny <= y2:
graph[x][y], tmp = tmp, graph[x][y]
x, y = nx, ny
else:
d += 1
graph[x1][y1] = tmp
answer.append(min_val)
def solution(rows, columns, queries):
answer = []
graph = [[i + 1 for i in range(j * columns, (j + 1) * columns)] for j in range(rows)]
for query in queries:
x1, y1, x2, y2 = map(int, query)
rotate(x1 - 1, y1 - 1, x2 - 1, y2 - 1, graph, answer)
return answer