[SWEA] 1961_숫자 배열 회전

김태민·2021년 9월 1일
0

알고리즘

목록 보기
13/77

Mingssssss

1. 문제

N x N 행렬이 주어질 때,

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

[제약 사항]

N은 3 이상 7 이하이다.

[입력]

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

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

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

[출력]

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

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

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

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

2. 코드

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()

3. 리뷰

이 문제도 가장 간단한 아이디어로 푸려고 했으나... 출력에서 고생했다.
이 문제로 출력하는 방법을 많이 배웠다. 모로가도 서울로만 가면 된다고,
출력하는 방법을 조작하는 방법을 배워서 좋았다!

profile
어제보다 성장하는 개발자

0개의 댓글