(2,2)에서 (5,4) 범위의 테두리에서 가장 작은 값을 저장해 두고 시계방향으로 회전함
다음 (3,3)에서 (6,6) 범위의 테두리에서 가장 작은 값을 저장해 두고 시계방향으로 회전함
다음 (5,1)에서 (6,3) 범위의 테두리에서 가장 작은 값을 저장하고 시계방향으로 회전함
위 진행을 그림으로 나타내면 아래와 같음
1단계 board를 만든다.
2단계 테두리부분을 하나의 1차원 행렬로 만든다
3단계 그 1차원 행렬에서 가장 작은 값을 저장
4단계 1차원 행렬을 시계 방향으로 회전하여 board를 업데이트 한다.
from collections import deque
def rotation(arr):
k=1
arr=deque(arr)
arr.rotate(-k)
return list(arr)
def solution(rows, columns, queries):
# 1단계 전처리
queries = [[r1-1, c1-1, r2-1, c2-1] for r1,c1,r2,c2 in queries]
board = [[i*columns+j for j in range(1,columns+1)] for i in range(rows)]
answer = []
# 2단계 회전에 참여하는 숫자들을 하나의 1차원 배열에 넣는다.
for x1,y1,x2,y2 in queries:
indices=[]
# 가장 위 테두리
indices += [(x1,c) for c in range(y1,y2+1)]
# 가장 오른쪽 테두리
indices += [(r,y2) for r in range(x1+1,x2)]
# 가장 아래 테두리
indices += [(x2, c) for c in range(y2,y1-1, -1)]
# 가장 왼쪽 테두리
indices += [(r, y1) for r in range(x2-1,x1, -1)]
nums = [board[r][c] for r,c in indices]
# 3단계 배열 중에 가장 작은 수 저장
answer.append(min(nums))
# 4단계 한칸씩 시계 방향으로 회전 하고 board를 업데이트
# indices = indices[1:] + [indices[0]]
indices = rotation(indices)
for num, (r,c) in zip(nums, indices):
board[r][c] = num
return answer