[SW Academy] 1961. 숫자 배열 회전

DreamJJW·2023년 5월 30일
0

SW Academy

목록 보기
14/26

📖 문제


※ SW Expert 아카데미의 문제를 무단 복제하는 것을 금지합니다.

N x N 행렬이 주어질 때,

시계 방향으로 90도, 180도, 270도 회전한 모양을 출력하라.

[제약 사항]

N은 3 이상 7 이하이다.

[입력]

가장 첫 줄에는 테스트 케이스의 개수 T가 주어지고, 그 아래로 각 테스트 케이스가 주어진다.

각 테스트 케이스의 첫 번째 줄에 N이 주어지고,

다음 N 줄에는 N x N 행렬이 주어진다.

[출력]

출력의 첫 줄은 '#t'로 시작하고,

다음 N줄에 걸쳐서 90도, 180도, 270도 회전한 모양을 출력한다.

입력과는 달리 출력에서는 회전한 모양 사이에만 공백이 존재함에 유의하라.

(t는 테스트 케이스의 번호를 의미하며 1부터 시작한다.)



📖 풀이

알고리즘에서 자주 등장하는 배열 회전 및 뒤집기 문제.
파이썬에서는 zip함수를 사용하면 for문으로 해결하는 것보다 좀 더 쉽게
해결할 수 있다.

회전하는 파트보다 출력 방식을 유의해야하는 문제였다.
(2번이나 틀림...)


T = int(input())

# 여러개의 테스트 케이스가 주어지므로, 각각을 처리합니다.
for test_case in range(1, T + 1):
    arr = []
    N = int(input())
    for i in range(N):
        lst = list(map(int, input().split()))
        arr.append(lst)

    turn90 = list(map(list, zip(*arr[::-1]))) # 90도 회전
    turn180 = list(map(list, zip(*turn90[::-1]))) # 180도 회전
    turn270 = list(map(list, zip(*turn180[::-1]))) # 270도 회전

    print("#{0}".format(test_case))
    for i in range(N):
        for j in range(N):
            print(turn90[i][j], end='')
        print('', end =' ')
        for k in range(N):
            print(turn180[i][k], end='')
        print('', end=' ')
        for l in range(N):
            print(turn270[i][l], end='')
        print('', end=' ')
        print('')
profile
간절한 사람

0개의 댓글