[Programmers] 행렬 테두리 회전하기
Updated:
행렬 테두리 회전하기
행렬 테두리 회전하기 를 클릭하면 바로 이동한다.
주어진 쿼리문을 통해 가능한 최소 행, 최대 행, 최소 열, 최대 열을 구해 시계방향으로 회전 범위를 구하며 값도 저장한다.
그리고 맨 마지막 인덱스에 있는 값을 빼 맨 처음 인덱스로 넣어준 뒤 회전 범위를 돌며 값을 다시 대입해 주면 시계방향으로 회전이 된다.
이때 최솟값도 같이 구하면 된다.
from collections import deque
def solution(rows, columns, queries):
answer = []
# 1. 배열 초기화
arr = [[0 for _ in range(columns)] for _ in range(rows)]
num = 1
for i in range(rows):
for j in range(columns):
arr[i][j] = num
num += 1
# 2. 쿼리문 마다 회전 범위 시계방향으로 구하기
for querie in queries:
rotate = deque([])
rotate_index = []
min_i, max_i = querie[0] - 1, querie[2] - 1
min_j, max_j = querie[1] - 1, querie[3] - 1
# 2-1 오른쪽 방향
for j in range(min_j, max_j + 1):
rotate.append(arr[min_i][j])
rotate_index.append([min_i, j])
# 2-2 아래쪽 방향
for i in range(min_i + 1, max_i + 1):
rotate.append(arr[i][max_j])
rotate_index.append([i, max_j])
# 2-3 왼쪽 방향
for j in range(max_j - 1, min_j - 1, -1):
rotate.append(arr[max_i][j])
rotate_index.append([max_i, j])
# 2-4 위쪽 방향
for i in range(max_i - 1, min_i - 1, -1):
rotate.append(arr[i][min_j])
rotate_index.append([i, min_j])
answer.append(min(rotate))
# 2-6 회전 범위를 통해 회전 시키기
rotate.appendleft(rotate.pop())
for index, num in zip(rotate_index, rotate):
arr[index[0]][index[1]] = num
return answer
if __name__ == "__main__":
rows = 3
columns = 3
queries = [[1, 1, 2, 2], [1, 2, 2, 3], [2, 1, 3, 2], [2, 2, 3, 3]]
print(solution(rows, columns, queries))
Leave a comment