주어진 직사각형 범위의 테두리를 시계방향으로 회전하고, 이 테두리에서 가장 작은 값들을 출력한다.
💻Solution
def solution(rows, columns, queries):
answer = []
matrix = []
# 행렬 생성
for i in range(1, rows*columns, columns):
tmp = []
for j in range(i, i+columns):
tmp.append(j)
matrix.append(tmp)
# matrix = [[i+(j)*columns for i in range(1,columns+1)] for j in range(rows)]
# 테두리 회전
for q in queries:
minimum = rows*columns+1
x1, y1, x2, y2 = q[0]-1, q[1]-1, q[2]-1, q[3]-1
tmp = matrix[x1][y1]
for a in range(x1, x2): # 왼쪽
if minimum > matrix[a+1][y1]:
minimum = matrix[a+1][y1]
matrix[a][y1] = matrix[a+1][y1]
for a in range(y1, y2): # 아래
if minimum > matrix[x2][a+1]:
minimum = matrix[x2][a+1]
matrix[x2][a] = matrix[x2][a+1]
for a in range(x2, x1, -1): # 오른쪽
if minimum > matrix[a-1][y2]:
minimum = matrix[a-1][y2]
matrix[a][y2] = matrix[a-1][y2]
for a in range(y2, y1, -1): # 위
if minimum > matrix[x1][a-1]:
minimum = matrix[x1][a-1]
matrix[x1][a] = matrix[x1][a-1]
if minimum > tmp: # tmp값 삽입
minimum = tmp
matrix[x1][y1+1] = tmp
answer.append(minimum)
return answer
🗝️keypoint
행렬의 테두리 회전은 왼쪽, 아래, 오른쪽, 위 로 나누어 생각할 수 있다.
왼쪽 테두리가 위로 한 칸씩 올라갈 때, 빠지게 되는 값을 따로 저장하고 최종적으로 삽입해야 한다.
행렬의 테두리를 직접 회전하지 않고, list에 담아 rotate하고 각 자리에 대입하는 방법을 사용할 수 있다.