규도자 개발 블로그

[SWEA/1961/파이썬3(python3)] 숫자 배열 회전 본문

알고리즘/풀이

[SWEA/1961/파이썬3(python3)] 숫자 배열 회전

규도자 (gyudoza) 2021. 9. 7. 13:25

[SWEA/1961/파이썬3(python3)] 숫자 배열 회전

문제

N x N 행렬이 주어질 때,

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

제한사항

N은 3 이상 7 이하이다.

입력

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

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

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

10
3
1 2 3
4 5 6
7 8 9
6
6 9 4 7 0 5
8 9 9 2 6 5
6 8 5 4 9 8
2 2 7 7 8 4
7 5 1 9 7 9
8 9 3 9 7 6
…

출력

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

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

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

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

#1
741 987 369
852 654 258
963 321 147
#2
872686 679398 558496
952899 979157 069877
317594 487722 724799
997427 894586 495713
778960 562998 998259
694855 507496 686278
…

풀이

case_count = int(input())

for i in range(1, case_count + 1):
    length = int(input())
    matrix = [list(map(int, input().split())) for _ in range(length)]
    rotate_90 = [[0] * length for _ in range(length)]
    rotate_180 = [[0] * length for _ in range(length)]
    rotate_270 = [[0] * length for _ in range(length)]
    for col in range(length):
        for row in range(length):
            rotate_90[row][length-col-1] = matrix[col][row]
            rotate_180[length-col-1][length-row-1] = matrix[col][row]
            rotate_270[length-row-1][col] = matrix[col][row]

    print('#{}'.format(i))
    for col in range(length):
        print(''.join(list(map(str, rotate_90[col]))), end=' ')
        print(''.join(list(map(str, rotate_180[col]))), end=' ')
        print(''.join(list(map(str, rotate_270[col]))))

설명

프로그래밍을 배울 때 2차원 배열을 배우면서 꼭 한 번 쯤은 풀게 되는 배열 회전 문제이다. 예전 기억을 더듬어봤을 땐 90도 회전만 한번 해봤었던 것 같은데 이 문제는 180도와 270도 회전도 각각 있고 출력 방식이 굉장히 참신해서 재밌어서 남겨봤다. 로직 만들 때 잠깐 귀찮은 생각이 들어서 180도 회전은 90도 회전 두번 먹이고, 270도 회전은 90도 회전 세번 먹이는 식으로 하려고 했다가 너무 날먹이라 그냥 제대로 짜봤다.

Comments