Mingssssss
N x N 행렬이 주어질 때,
시계 방향으로 90도, 180도, 270도 회전한 모양을 출력하라.
[제약 사항]
N은 3 이상 7 이하이다.
[입력]
가장 첫 줄에는 테스트 케이스의 개수 T가 주어지고, 그 아래로 각 테스트 케이스가 주어진다.
각 테스트 케이스의 첫 번째 줄에 N이 주어지고,
다음 N 줄에는 N x N 행렬이 주어진다.
[출력]
출력의 첫 줄은 '#t'로 시작하고,
다음 N줄에 걸쳐서 90도, 180도, 270도 회전한 모양을 출력한다.
입력과는 달리 출력에서는 회전한 모양 사이에만 공백이 존재함에 유의하라.
(t는 테스트 케이스의 번호를 의미하며 1부터 시작한다.)
import sys
sys.stdin = open('input.txt')
def rotation():
global arr # global 변수 선언
rotation_list = arr[:] # arr 리스트 복사
result = '' # rotation_list에 집어넣을 변수 초기화
cnt = 0 # while문 변수 초기화
cnt_2 = 0 # 리스트 인덱스 조정하기 위한 값 초기화
while cnt < N: # NxN 행렬이므로 N번 반복
for i in range(N): # N번 동안 시행
for j in range(N-1+cnt_2, cnt_2-1, -1): # *가장 마지막 행을 찾아서 거꾸로 값을 변수에 추가
result += str(rotation_list[j][i])+' ' # 인덱스 탐색을 위해 ' '추가해서 result에 추가
rotation_list.append(result.split()) # rotation_list에 값 추가
result = '' # result 변수 초기화
cnt += 1 # 1열 탐색 후 cnt값 1 추가
cnt_2 += N # N행을 지나야 90도 돌린 값을 탐색 가능하므로
for d in range(N): # 초기값 N번 만큼 앞에 리스트 삭제
rotation_list.pop(0)
print('#{}'.format(tc+1))
cnt_3 = 0
while cnt_3 < N: # arr = [['7', '4', '1'], ['8', '5', '2'], ['9', '6', '3']...],
for i in range(cnt_3, 2*N+cnt_3+1, N): # N=3, 0 3 6 /1 4 7/ 2 5 8 ...
for a in range(N):
print(rotation_list[i][a], end='')
print(end=' ')
print()
cnt_3 += 1
T = int(input())
for tc in range(T):
N = int(input())
arr = [list(map(str, input().split())) for _ in range(N)]
rotation()
이 문제도 가장 간단한 아이디어로 푸려고 했으나... 출력에서 고생했다.
이 문제로 출력하는 방법을 많이 배웠다. 모로가도 서울로만 가면 된다고,
출력하는 방법을 조작하는 방법을 배워서 좋았다!