본문 바로가기
알고리즘

정방행렬 90° 회전 (python)

by 까망 하르방 2021. 2. 28.
반응형

 Input 

5

3 4 1 2 3

2 3 4 5 6

2 3 4 6 7

1 7 6 5 4

6 8 9 3 4

 

 Output 

6 1 2 2 3

8 7 3 3 4

9 6 0 4 1

3 5 6 5 2

4 4 7 6 3 

행렬을 90° 회전시 아래와 같이 원소를 배치하려는 경우 테두리별로 4개의 for문 이용해야 합니다.

n = int(input())
arr = [ list(map(int, input().split())) for i in range(n) ]
def rotate():
    # arr[][]에 쓰기 동작을 위해서는 global 키워드 필요
    global arr
    temp = [[] for i in range(len(arr[0]))]
    for i in range(n):
        for j in range(n):
            temp[i].append(0)
    sr, sc = 0, 0
    er, ec = n-1, 0
    sLen = n-1
    while True:
        # 정방행렬 크기가 1이거나 0인 경우
        if sLen <= 1:
            break;
        for i in range(sLen):
            temp[sr][sc] = arr[er][ec]
            sc = sc+1
            er = er-1
             
        for i in range(sLen):
            temp[sr][sc] = arr[er][ec]
            sr = sr + 1
            ec = ec + 1
             
        for i in range(sLen):
            temp[sr][sc] = arr[er][ec]
            sc = sc - 1
            er = er + 1
        for i in range(sLen):
            temp[sr][sc] = arr[er][ec]
            sr = sr - 1
            ec = ec - 1
             
        sLen = sLen - 2
        sr, sc = sr + 1, sc + 1
        er, ec = er - 1, ec + 1
    arr = temp
# 90도 회전
rotate()
     
for i in range(n):
    print(*arr[i])

 

Version 2

90° 회전을 아래와 같이 배치시킬 수 있습니다.

위 방법보다 더 구현하기 좋다.

n = int(input())
arr = [list(map(int, input().split())) for i in range(n)]
def rotate():
    ret = [[0] * n for _ in range(n)]
    for r in range(n):
        for c in range(n):
            ret[c][n-1-r] = arr[r][c]
    return ret
arr = rotate()
for i in range(n):
    print(*arr[i])

 

 

반응형

댓글