https://school.programmers.co.kr/learn/courses/30/lessons/77485
def solution(rows, columns, queries):
answer = []
# 숫자 리스트를 잘라서 이차원 그래프로 만듬
num_list = [ i for i in range(1,rows*columns+1)]
graph = []
for i in range(rows):
graph.append(num_list[i*columns:(i+1)*columns])
for q in queries:
x1,y1,x2,y2 = q
rev_list = [] # 테두리의 좌표를 담을 리스트
for i in range(y1,y2):
rev_list.append((x1,i))
for i in range(x1,x2):
rev_list.append((i,y2))
for i in range(y2,y1,-1):
rev_list.append((x2,i))
for i in range(x2,x1,-1):
rev_list.append((i,y1))
value_list = [] # 테두리의 값을 담을 리스트
# 테두리 리스트를 완성해줌
for i in rev_list:
value = graph[i[0]-1][i[1]-1]
value_list.append(value)
answer.append(min(value_list)) # 출력해야하는 최솟값을 answer에 넣어줌
# 테두리를 한칸 회전시켜줌
elem = rev_list.pop(0)
rev_list.append(elem)
# 회전된 좌표를 값과 매칭해줌
for i in range(len(rev_list)):
graph[rev_list[i][0]-1][rev_list[i][1]-1] = value_list[i]
return answer
파이썬에서 회전은 일차원 리스트에 담아서 돌려준뒤 매칭시켜주면 된다.
예를 들어서 3X3 행렬에서 가운데를 제외한 테두리 전체를 돌린다고 생각해보자.
(1,1)을 기준으로 테두리의 좌표는
[(1,1),(1,2),(1,3),(2,3),(3,3),(3,2),(3,1),(2,1)]
이고 실제 값은 [1,2,3,6,9,8,7,4] 일 것이다.
테두리를 시계방향으로 한칸 돌리면
[(1,1),(1,2),(1,3),(2,3),(3,3),(3,2),(3,1),(2,1)] = [1,2,3,6,9,8,7,4]
이렇게 매칭되는 것이
[(1,2),(1,3),(2,3),(3,3),(3,2),(3,1),(2,1),(1,1)] = [1,2,3,6,9,8,7,4]
이렇게 변하는 것이다.