2차원 배열 돌리기는 직접 구현하거나, zip을 이용하여 간편하게 바꾸는 2가지 방법이 있습니다.
1. 직접 구현하기
[[1, 2, 3], [4, 5, 6], [7, 8, 9]] 와 같은 배열을 한 번 돌리면, [[7, 4, 1], [8, 5, 2], [9, 6, 3]] 와 같은 결과를 얻을 수 있습니다. 180, 270도 회전을 원하면 rotate 함수를 여러 번 호출하면 됩니다.
def rotate(graph):
n = len(graph)
m = len(graph[0])
result = [[0]* n for _ in range(m)]
for i in range(n):
for j in range(m):
result[i][j] = graph[n-1-j][i]
return result
# [[7, 4, 1], [8, 5, 2], [9, 6, 3]]
2. zip을 이용하여 구현하기
zip은 인덱스가 같은 요소들을 잘라서 리스트로 반환해줍니다. 예를 들어 ["a", "b"]와 [1, 2]라는 리스트가 있으면, [('a', 1), ('b', 2)]를 반환합니다.
arr = ["a", "b"]
num = [1,2]
ans = list(zip(arr, num))
# [('a', 1), ('b', 2)]
이것을 이용해 리스트를 뒤집은 뒤, zip 함수를 이용하면 회전한 배열을 얻을 수 있습니다.
이때, zip type으로 반환되므로 list나 dict와 같은 자료형으로 변환해야 합니다. 결과값을 확인해보면, 리스트 안에 튜플로 값을 반환하는 것을 알 수 있습니다.
graph = [[1,2,3],[4,5,6],[7,8,9]]
reversed_graph = graph[::-1]
rotated = list(zip(*reversed_graph))
print(rotated)
#[(7, 4, 1), (8, 5, 2), (9, 6, 3)]