Algorithm/SW Expert Academy

[Python] 1961. 숫자 배열 회전

느낌표 공장장 2021. 9. 16. 23:41

풀이 1)  행렬을 90도 돌리면서 값 구하기

# 받은 행렬 90도 돌려주는 함수
def revolution_90(matrix):
    # 빈 행렬 만들기
    new_matrix = [[0 for _ in range(n)] for _ in range(n)]

    # 90도 돌리기
    for i in range(n):
        for j in range(n):
            new_matrix[j][n-i-1] = matrix[i][j]

    # ['1', '2', '3'] 이면 '123' 의 형태로 출력해야하기 때문에 붙여서 넣어주었다.
    complete = [''.join(line) for line in new_matrix]

    return complete

def revolution_90_simple(matrix):
    new_matrix = []
    for i in zip(*matrix):
        new_matrix.append(''.join(map(str, i[::-1])))
    return new_matrix


t = int(input())

for idx in range(1, t+1):
    print('#{}'.format(idx))
    n = int(input())

    # 행렬 받아오기
    matrix = []
    for _ in range(n):
        matrix.append(list(map(str, input().split())))

    d_90 = revolution_90(matrix)    # 받아온 행렬에서 90도 돌리기
    d_180 = revolution_90(d_90)     # 90도 돌린 행렬에서 90도 돌리기 -> 180도
    d_270 = revolution_90(d_180)    # 180도 돌린 행렬에서 90도 돌리기 -> 270도

    for i in range(n):
        # 90도, 180도, 270도의 i행 출력
        print(d_90[i], d_180[i], d_270[i])

 

 

풀이 2) 각 각도마다 자리 찾아 넣기 

t = int(input())

for idx in range(1, t+1):
    print('#{}'.format(idx))
    n = int(input())

    # n * n 행렬 받아오기
    matrix = []
    for _ in range(n):
        # 문자열로 붙여줄것이기 때문에 문자 타입으로 넣어줌
        matrix.append(list(map(str, input().split())))

    # 각도마다 회전한 모양 담을 리스트
    # 각 행을 붙여서 print해야 하기 떄문에 빈 문자열 넣어준다.
    # ex) 1행 :  ['1', '2', '3'] -> '123'
    r_90 = ['' for _ in range(n)]
    r_180 = ['' for _ in range(n)]
    r_270 = ['' for _ in range(n)]

    for i in range(n):
        for j in range(n):
            r_90[n-i-1] = matrix[j][n-i-1] + r_90[n-i-1]
            r_180[i] += matrix[n-i-1][n-j-1]
            r_270[n-i-1] = matrix[n-j-1][i] + r_270[n-i-1]

    for i in range(n):
        # 90도 180도 270도의 i행 출력
        print(r_90[i], r_180[i], r_270[i])