rows x columns 크기인 행렬이 있습니다. 행렬에는 1부터 rows x columns까지의 숫자가 한 줄씩 순서대로 적혀있습니다. 이 행렬에서 직사각형 모양의 범위를 여러 번 선택해, 테두리 부분에 있는 숫자들을 시계방향으로 회전시키려 합니다. 각 회전은 (x1, y1, x2, y2)인 정수 4개로 표현하며, 그 의미는 다음과 같습니다.
x1 행 y1 열부터 x2 행 y2 열까지의 영역에 해당하는 직사각형에서 테두리에 있는 숫자들을 한 칸씩 시계방향으로 회전합니다.
행렬의 세로 길이(행 개수) rows, 가로 길이(열 개수) columns, 그리고 회전들의 목록 queries가 주어질 때, 각 회전들을 배열에 적용한 뒤, 그 회전에 의해 위치가 바뀐 숫자들 중 가장 작은 숫자들을 순서대로 배열에 담아 return 하도록 solution 함수를 완성해주세요.
def solution(rows, columns, queries):
count = 1
target=[]
# 열과 행에 맞는 사각형 만들기 ( target 리스트 )
for i in range(rows):
matrix = []
for j in range(columns):
matrix.append(count)
count +=1
target.append(matrix)
answer = []
for k in queries:
clock=[]
row = []
col = []
# 시계방향으로 움직일 행렬상의 지점 구하기
row += [ k[0] ] * (k[3]-k[1] + 1)
row += [rc for rc in range(k[0]+1,k[2])]
row += [ k[2] ] * (k[3]-k[1] + 1 )
row += [rc for rc in range(k[2]-1,k[0],-1)]
col += [k[1]]
col += [cc for cc in range(k[1]+1,k[3])]
col += [k[3]] * (k[2]-k[0]+1)
col += [cc for cc in range(k[3]-1,k[1],-1)]
col += [k[1]] * (k[2]-k[0])
loc = [[a,b] for a,b in zip(row,col)]
for i in loc:
clock.append(target[i[0]-1][i[1]-1])
# 시계방향 회전에 해당할 좌표 배정
clock.insert(0,clock[-1])
clock.pop()
answer.append(min(clock))
# 다시 사각형 테두리에 해당하는 값 집어넣기
for index, num in enumerate(loc):
target[num[0]-1][num[1]-1] = clock[index]
return answer
테스트 케이스(rows, columns, queries) | 답 |
---|---|
6,6,[[2,2,5,4],[3,3,6,6],[5,1,6,3]] | [8, 10, 25] |
3,3,[[1,1,2,2],[1,2,2,3],[2,1,3,2],[2,2,3,3]] | [1,1,5,3] |
100,97,[[1,1,100,97]] | [1] |