반복문으로 한 번에 회전하는 방법은 없기에 상하좌우 총 4번으로 나눠서 회전을 해야 한다.
그런데 문제는 회전하게 되면 줄의 끝 번호는 회전에 의해 사라지게 된다는 것이다.
그래서 그 번호를 기억해둬야 한다.
좌를 시작으로 반시계 방향(좌 -> 하 -> 우 -> 상 순서)으로 회전을 진행하면 왼쪽 제일 위 번호만 사라지기 때문에 왼쪽 제일 위 번호만 기억해두면 번호의 손실은 없다.
반시계 방향(좌 -> 하 -> 우 -> 상) 회전하고 왼쪽 제일 위 다음 번호를 기억해둔 번호로 변경한다. 그리고, 매 회전마다 회전하는 번호들을 비교하여 회전한 번호 중 가장 작은 번호를 찾는다.
def solution(rows, columns, queries):
answer = []
arr = [[0]*columns for _ in range(rows)]
cnt = 1
for i in range(rows):
for j in range(columns):
arr[i][j] = cnt
cnt += 1
for x1,y1,x2,y2 in queries:
tmp = arr[x1-1][y1-1]
min_num = tmp
for i in range(x2-x1): # 왼쪽 세로
change_num = arr[x1+i][y1-1]
arr[x1-1+i][y1-1] = change_num
min_num = min(min_num,change_num)
for i in range(y2-y1): # 아래쪽 가로
change_num = arr[x2-1][y1+i]
arr[x2-1][y1-1+i] = change_num
min_num = min(min_num,change_num)
for i in range(x2-x1): # 오른쪽 세로
change_num = arr[x2-2-i][y2-1]
arr[x2-1-i][y2-1] = change_num
min_num = min(min_num,change_num)
for i in range(y2-y1): # 위쪽 가로
change_num = arr[x1-1][y2-2-i]
arr[x1-1][y2-1-i] = change_num
min_num = min(min_num,change_num)
arr[x1-1][y1] = tmp
answer.append(min_num)
return answer