Algorithm 풀이/SW Expert Academy

[SWEA] 1961. 숫자 배열 회전_python

yeguu 2022. 8. 26. 01:32

https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV5Pq-OKAVYDFAUq 

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com

 

* 문제의 저작권은 SW Expert Academy에 있습니다.


1. 문제

N x N 행렬이 주어질 때,

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


[제약 사항]

N은 3 이상 7 이하이다.

[입력]

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

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

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

[출력]

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

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

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

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

 
 
 

2. 내 풀이

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

    rotate_90 = [[0]*n for _ in range(n)]
    rotate_180 = [[0]*n for _ in range(n)]
    rotate_270 = [[0]*n for _ in range(n)]

    # 1) 90도 회전
    for i in range(n):
        for j in range(n):
            rotate_90[i][j] = arr[n-j-1][i]

    # 2) 180도 회전
    for i in range(n):
        for j in range(n):
            rotate_180[i][j] = rotate_90[n-j-1][i]

    # 3) 270도 회전
    for i in range(n):
        for j in range(n):
            rotate_270[i][j] = rotate_180[n-j-1][i]

    # 4) 출력
    print(f'#{tc}')
    for i in range(n):
        for a in range(n):
            print(rotate_90[i][a], end='')
        print(end=' ')
        for b in range(n):
            print(rotate_180[i][b], end='')
        print(end=' ')
        for c in range(n):
            print(rotate_270[i][c], end='')
        print()

-> 머리 쥐어뜯다가 다른 풀이를 찾아본 문제..

-> 회전시킬 때 큐칙이 있다는 것을 깨달았고, 출력하는 부분에서 도움을 받았다.

-> 이렇게 출력하는 방식이 낯설다. 공부 필요.

 

 

 

3. 다른 풀이

def dd(n, nums):
    new = [[0] * n for _ in range(n)]
    for i in range(n):
        for j in range(n):
            new[dy[j]][dx[i]] = nums[i][j]
    return new

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

    dx, dy = [], []
    for i in range(n-1, -1, -1):
        dx.append(i)
    for i in range(n):
        dy.append(i)

    result = []
    for _ in range(3):
        result.append(dd(n, nums))
        nums = dd(n, nums)

    print(f'#{tc}')
    for k in range(n):
        for l in range(3):
            for _ in result[l][k]:
                print(_, end='')
            print(end=' ')
        print()