본문 바로가기

코딩테스트/SWEA

[Python, 파이썬] SWEA 1961. 숫자 배열 회전

N x N 행렬이 주어질 때, 시계 방향으로 90도, 180도, 270도 회전한 모양을 출력하는 문제.

 

 

T = int(input()) # 테스트케이스의 개수 T

for test_case in range(1, T+1):
    N = int(input()) # 행렬 N
    matrix = [input().split() for i in range(N)]

    reverse = list(zip(*matrix)) # 전치 행렬

    print("#%d" %(test_case)) # 테스트케이스의 번호 출력

    for i in range(N):
        rotate90 = ''.join(reverse[i]) # 문자열로 변환
        rotate90 = rotate90[::-1] # 역순으로 만든다 rotate 90도!

        rotate180 = ''.join(matrix[N-(i+1)]) # 아래서부터 위까지
        rotate180 = rotate180[::-1] # 역순

        rotate270 = ''.join(reverse[N-(i+1)]) # 오른쪽부터 왼쪽

        print(rotate90, rotate180, rotate270)
 

 

 

[문제풀이]


 

90도 회전한 건 이렇게 왼쪽에서부터 아래쪽부터 위로 요소를 가져와 붙이는 741, 852, 963이고, 180도 회전의 경우엔 배열의 마지막 행부터 첫 행까지 역순으로 가져와 987, 654, 321 이렇게 하는 방식이다.

 

270도 회전의 경우엔 오른쪽부터 왼쪽으로 위에서부터 아래로 요소를 가져와 369, 258, 147 식으로 구한다.

이걸 그냥 코드로 구현해 print하면 끝.