상세 컨텐츠

본문 제목

[SWEA] #1961 숫자 배열 회전.python(파이썬)

문제풀이/SWEA

by jer0618 2021. 8. 15. 02:20

본문

문제 링크 / 출처

https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV5Pq-OKAVYDFAUq&categoryId=AV5Pq-OKAVYDFAUq&categoryType=CODE&problemTitle=1961&orderBy=FIRST\_REG\_DATETIME&selectCodeLang=ALL&select-1=&pageSize=10&pageIndex=1

 

SW Expert Academy

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

swexpertacademy.com

 

문제요약

N x N 행렬이 주어질 때, 시계 방향으로 90도, 180도, 270도 회전한 모양을 출력.

[제약 사항]

N은 3 이상 7 이하

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

1 2 3 741 987 369
4 5 6 => 852 654 258
7 8 9 963 321 147

 

풀이

회전은 이중 for문을 사용해 배열의 값을 가져오는 방법으로 구현했다.

 

배열의 인덱스 r,c는 각도에 따라 아래 표처럼 나타낼 수 있다.

 

angle 0 90 180 270
angle_r r n-c-1 n-r-1 c
angle_c c r n-c-1 n-r-1

 

따라서, 각 각도에 대응하는 인덱스(a)의 몫과 나머지 연산을 통해 값이 적절히 나타나고 사라지도록하였다.

 

angle 0 90 180 270
a 0 1 2 3
a//2 0 0 1 1
a%2 0 1 0 1

위 방법으로 각 각도에 대응하는 결과리스트를 가져와 양식에 맞게 출력하였다.

 

* 사실 90도 회전시킨 표를 한번 더 90도 회전시키면 180도가 나오고, 그것을 또 회전시키면 270도가 나오므로 배열을 90도로 회전시키는 함수 하나만으로도 풀이가 가능하다..

 

코드

def rotation(table, angle=0):   # 회전하는 각도에 따른 배열을 가져오는 함수
    n = len(table)
    a = (angle//90) % 4
    new_table = []

    for r in range(n):
        temp = ''
        for c in range(n):
            # 아래 표에 따라 순회하며 값을 가져옴
            # angle     0     90      180     270
            # angle_r   r     n-c-1   n-r-1   c
            # angle_c   c     r       n-c-1   n-r-1

            angle_r = (r+(n-2*r-1)*(a//2))*(1-a%2)+(c+(n-2*c-1)*(1-a//2))*(a%2)
            angle_c = (c+(n-2*c-1)*(a//2))*(1-a%2)+(r+(n-2*r-1)*(a//2))*(a%2)
            temp += str(table[angle_r][angle_c])
        new_table.append(temp)  # 출력을 쉽게하기 위해 숫자를 문자열로 바꾸어 1차원리스트에 저장

    return new_table 


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

    arr90 = rotation(arr, 90)
    arr180 = rotation(arr, 180)
    arr270 = rotation(arr, 270)

    print('#{}'.format(tc))
    for i in range(N):
        print(arr90[i], arr180[i], arr270[i])
반응형

관련글 더보기