이 문제는 무엇보다 회전하는 방법을 알고 있다면 쉽게 풀 수 있는 문제이다.
1 2 3
4 5 6
7 8 9
tmp = 4 저장
(1) 1 ~ 7
4 ← 7
(2) 7 ~ 9
7 ← 8
8 ← 9
(3) 9 ~ 3
9 ← 6
6 ← 3
(4) 3 ~ 1
3 ← 2
2 ← 1
1 ← tmp
위 예시를 보면 회전 식을 알 수 있다.
시작 좌표 : x1, y1
끝 좌표 : x2, y2
tmp = arr[x1+1][y1]
(1) k : x1 + 1 부터 x2 - 1까지
arr[k][y1] = arr[k+1][y1]
(2) k : y1 부터 y2 - 1 까지
arr[x2][k] = arr[x2][k+1]
(3) k : x2 부터 x1 + 1까지 (-1씩 빼기)
arr[k][y2] = arr[k-1][y2]
(4) k : y2 부터 y1 + 1까지 (-1씩 빼기)
arr[x1][k] = arr[x1][k-1]
arr[x1][y1] = tmp
회전 식을 적용하면 답을 쉽게 구할 수 있다.
def change_swap(x1, y1, x2, y2, arr):
tmp = arr[x1+1][y1]
result = arr[x1+1][y1]
for k in range(x1 + 1, x2):
arr[k][y1] = arr[k+1][y1]
result = min(result, arr[k+1][y1])
for k in range(y1, y2):
arr[x2][k] = arr[x2][k+1]
result = min(result, arr[x2][k+1])
for k in range(x2, x1, -1):
arr[k][y2] = arr[k-1][y2]
result = min(result, arr[k-1][y2])
for k in range(y2, y1, -1):
arr[x1][k] = arr[x1][k-1]
result = min(result, arr[x1][k-1])
arr[x1][y1] = tmp
return result
def solution(rows, columns, queries):
answer = []
arr = [[0] * (columns + 1) for _ in range(rows+1)]
in_d = 1
for i in range(1, rows+1):
for j in range(1, columns + 1):
arr[i][j] = in_d
in_d += 1
for q in queries:
answer.append(change_swap(q[0], q[1], q[2], q[3], arr))
return answer