개발 공부~

[SWEA D2] 1961. 숫자 배열 회전.py 본문

코딩테스트/SWEA

[SWEA D2] 1961. 숫자 배열 회전.py

머밍 2024. 7. 2. 17:26

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

 

SW Expert Academy

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

swexpertacademy.com

문제

N x N 행렬이 주어질 때,

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

  • 제약 사항
  • N은 3 이상 7 이하이다.
  • 입력각 테스트 케이스의 첫 번째 줄에 N이 주어지고, 다음 N 줄에는 N x N 행렬이 주어진다.
  • 가장 첫 줄에는 테스트 케이스의 개수 T가 주어지고, 그 아래로 각 테스트 케이스가 주어진다.
  • 출력다음 N줄에 걸쳐서 90도, 180도, 270도 회전한 모양을 출력한다.(t는 테스트 케이스의 번호를 의미하며 1부터 시작한다.)
  • 입력과는 달리 출력에서는 회전한 모양 사이에만 공백이 존재함에 유의하라.
  • 출력의 첫 줄은 '#t'로 시작하고,

ex

입력
1
3
1 2 3
4 5 6
7 8 9

출력
#1
741 987 369
852 654 258
963 321 147

Solution

  1. 90도, 180도, 270도 를 각각 생각하지말고 90도 회전 시킨 배열을 계속 이용한다는 접근을 생각 못함 -> 도움을 받음
  2. https://www.youtube.com/watch?v=2uDBRunCbqc

 

 

 

  1. 회전시킨 배열의 행마다 문자열로 만들어 하나의 이차원 배열의 원소로 넣는 것이 어려웠음
    -> zip()과 ''.join(map(str,적용시킬 문자))에 대한 이해가 잘 되지않았는데 이 문제를 통해 배웠다.
# 회전하는 함수
def recur(ar):
    result = [ [0]*n for _ in range(n)]
    for i in range(n):
        for j in range(n):
            result[j][n-i-1] = ar[i][j]
    return result
    
T = int(input())
for tc in range(1,T+1):
    n =int(input())
    arr= [ list(map(int,input().split())) for _ in range(n)]
    
    arr2 = recur(arr)
    arr3 = recur(arr2)
    arr4 = recur(arr3)

    print(f'#{tc}')
    for a,b,c in zip(arr2,arr3,arr4):
        print(''.join(map(str, a)), ''.join(map(str, b)), ''.join(map(str, c)))