SWEA

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

sson-coding 2025. 11. 19. 22:28

문제 링크

https://swexpertacademy.com/main/code/problem/problemDetail.do?problemLevel=2&contestProbId=AV5Pq-OKAVYDFAUq&categoryId=AV5Pq-OKAVYDFAUq&categoryType=CODE&problemTitle=&orderBy=INQUERY_COUNT&selectCodeLang=ALL&select-1=2&pageSize=10&pageIndex=2

문제

N x N 행렬이 주어질 때,

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

[제약 사항]

N은 3 이상 7 이하이다.

입력

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

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

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

출력

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

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

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

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

예제

입력

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부터 시작한다.)


정답 및 풀이

t = int(input())

for tc in range(1, t+1):
    n = int(input())
    arr = [list(map(int, input().split())) for _ in range(n)]

    rot90 = [[0]*n for _ in range(n)]
    rot180 = [[0]*n for _ in range(n)]
    rot270 = [[0]*n for _ in range(n)]

    for i in range(n):
        for j in range(n):
            rot90[i][j] = arr[n-1-j][i]

    for i in range(n):
        for j in range(n):
            rot180[i][j] = rot90[n-1-j][i]

    for i in range(n):
        for j in range(n):
            rot270[i][j] = rot180[n-1-j][i]

    print(f'#{tc}')
    for i in range(n):
        print("".join(map(str, rot90[i])),
              "".join(map(str, rot180[i])),
              "".join(map(str, rot270[i])))

  1. t = int(input())
    • 테스트 케이스 개수를 입력받는다.
  2. for tc in range(1, t+1):
    • 테스트 케이스 번호를 1부터 시작해서 t까지 반복한다.
  3. n = int(input())
    • 배열의 크기 n×n 을 입력받는다.
  4. arr = [list(map(int, input().split())) for _ in range(n)]
    • n줄에 걸쳐 숫자를 입력받아 원본 배열 arr에 저장한다.
  5. rot90 = [[0]*n for _ in range(n)]
    • 90도 회전 결과를 저장할 n×n 배열을 0으로 초기화한다.
  6. rot180 = [[0]*n for _ in range(n)]
    • 180도 회전 결과를 저장할 n×n 배열을 0으로 초기화한다.
  7. rot270 = [[0]*n for _ in range(n)]
    • 270도 회전 결과를 저장할 n×n 배열을 0으로 초기화한다.
  8. for i in range(n): for j in range(n): rot90[i][j] = arr[n-1-j][i]
    • arr를 기준으로 90도 회전된 값을 rot90에 채운다.
    • 회전 공식은 (i, j) ← (n-1-j, i) 이다.
  9. for i in range(n): for j in range(n): rot180[i][j] = rot90[n-1-j][i]
    • 90도 회전 배열 rot90을 한 번 더 90도 회전시켜 180도 회전 배열 rot180을 만든다.
    • 마찬가지로 (i, j) ← (n-1-j, i) 공식을 rot90에 적용한다.
  10. for i in range(n): for j in range(n): rot270[i][j] = rot180[n-1-j][i]
    • 180도 회전 배열 rot180을 한 번 더 90도 회전시켜 270도 회전 배열 rot270을 만든다.
    • 역시 (i, j) ← (n-1-j, i) 공식을 rot180에 적용한다.
  11. print(f'#{tc}')
    • 출력 형식에 맞게 현재 테스트 케이스 번호를 출력한다.
  12. for i in range(n): print("".join(map(str, rot90[i])), "".join(map(str, rot180[i])), "".join(map(str, rot270[i])))
    • i번째 행 기준으로180도 회전 결과 한 줄,공백 하나로 구분해서 출력한다.
    • 270도 회전 결과 한 줄을
    • 90도 회전 결과 한 줄,
    • "".join(map(str, rot90[i])) 는 숫자 리스트를 붙여서 문자열로 만든다.