본문 바로가기
프로그래밍언어/Code_Practice

[SW Expert Academy] 숫자 배열 회전

by 스꼬맹이브로 2021. 1. 28.
728x90
반응형
SMALL

*문제의 저작권은 SW Expert에 있습니다.
문제 링크 : https://swexpertacademy.com/main/code/problem/problemDetail.do?problemLevel=2&contestProbId=AV5Pq-OKAVYDFAUq&categoryId=AV5Pq-OKAVYDFAUq&categoryType=CODE&problemTitle=&orderBy=FIRST_REG_DATETIME&selectCodeLang=ALL&select-1=2&pageSize=10&pageIndex=2

 

SW Expert Academy

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

swexpertacademy.com

이번 문제는 문제 이해부터 어려웠던...

먼저 문제를 이해하면 다음 그림과 같다.

즉, 행과 열의 바뀌는 패턴만 이해하면 된다!!!!!!!!!!!

행과 열의 숫자로 표현하면

 

이렇게 된다. 패턴이 보이기 시작!

 

이렇게 바뀐 2차원 행렬을 출력하려고 하니 굉장히 막막해졌...

그래서 다른 방법으로 각 행별로 저장하여 출력하기로 했다.

 

그래서 나온 코드!

T = int(input())
for test_case in range(1,T+1):
    lines = int(input())
    a,result = [],[]
    # lines만큼 input 받아 배열로 저장
    for i in range(lines):
        a.append(list(map(str, input().split())))
    #90도 회전시 (0,0)->(2,0),(0,1)->(1,0),(0,2)->(2,0)... 처럼 나타나는 패턴별로 각 행별 input
    for n in range(0,lines):
        row1,row2,row3 = [], [], []
        for m in range(0,lines):
            row1.append(str(a[lines-1-m][n]))
            row2.append(str(a[lines-1-n][lines-1-m]))
            row3.append(str(a[m][lines-1-n]))
        #각 행을 한줄로 배열에 저장
        result += [''.join(row1),''.join(row2),''.join(row3)]
    print(f"#{test_case}")
    #3번 출력시 다음 줄로 넘어가도록 출력
    for x in range(0,len(result)):
        print(result[x],end="\n" if (x+1)%3==0 and x>=2 else ' ')

 

 

주관적으로 D2 난이도 중에서 제일 머리써야 했던 것 같다...

728x90
반응형
LIST