import copy
# 회전 함수
def rotation(rc_map, query):
# 좌표
[x1, y1, x2, y2] = query
x1 -= 1
y1 -= 1
x2 -= 1
y2 -= 1
# 깊은 복사
new_rc_map = copy.deepcopy(rc_map)
# 움직인 값
values = set()
# x1줄 오른쪽 이동
for y in range(y1, y2):
value = rc_map[x1][y]
values.add(value)
new_rc_map[x1][y+1] = value
# x2줄 왼쪽 이동
for y in range(y2, y1, -1):
value = rc_map[x2][y]
values.add(value)
new_rc_map[x2][y-1] = value
# y1줄 위쪽 이동
for x in range(x2, x1, -1):
value = rc_map[x][y1]
values.add(value)
new_rc_map[x-1][y1] = value
# y2줄 아래쪽 이동
for x in range(x1, x2):
value = rc_map[x][y2]
values.add(value)
new_rc_map[x+1][y2] = value
return new_rc_map, min(values)
def solution(rows, columns, queries):
# rows x columns 크기인 행렬
rc_map = [[x*(columns)+(y+1) for y in range(columns)] for x in range(rows)]
answer = []
for query in queries:
rc_map, value = rotation(rc_map, query)
# 움직인 값 중에 가장 작은 값
answer.append(value)
return answer
깊은 복사로 풀었을 경우는 시간초과!
# 회전 함수
def rotation(rc_map, query):
# 좌표
[x1, y1, x2, y2] = query
x1 -= 1
y1 -= 1
x2 -= 1
y2 -= 1
# 초기값
tmp = rc_map[x1][y1]
# 움직인 값
mini = tmp
# 거꾸로 가야 함!!
# y1줄 위쪽 이동
for x in range(x1, x2):
value = rc_map[x+1][y1]
rc_map[x][y1] = value
mini = min(mini, value)
# x2줄 왼쪽 이동
for y in range(y1, y2):
value = rc_map[x2][y+1]
rc_map[x2][y] = value
mini = min(mini, value)
# y2줄 아래쪽 이동
for x in range(x2, x1, -1):
value = rc_map[x-1][y2]
rc_map[x][y2] = value
mini = min(mini, value)
# x1줄 오른쪽 이동
for y in range(y2, y1, -1):
value = rc_map[x1][y-1]
rc_map[x1][y] = value
mini = min(mini, value)
rc_map[x1][y1+1] = tmp
return mini
def solution(rows, columns, queries):
# rows x columns 크기인 행렬
rc_map = [[x*(columns)+(y+1) for y in range(columns)] for x in range(rows)]
answer = []
for query in queries:
value = rotation(rc_map, query)
# 움직인 값 중에 가장 작은 값
answer.append(value)
return answer