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

 

SW Expert Academy

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

swexpertacademy.com

 


풀이 및 해석(주석)

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

    ans1 = [['']*N for _ in range(N)]       # 숫자들을 문자열로 만들 빈 리스트 생성 -> [['', '', ''], ['', '', ''], ['', '', '']]
    print(ans1)
    for j in range(N):
        for i in range(N-1, -1, -1):   
            ans1[j][0] += str(arr[i][j])    # 90도 돌려준것을 문자열로 빈 리스트 인덱스 0리스트에 삽입

    for i in range(N-1, -1, -1):            # 180도 돌려주는데, 위와 아래가 바뀌어 있어서, 밑의 과정으로 재 정렬해줌
        for j in range(N-1, -1, -1):
            ans1[i][1] += str(arr[i][j])
    for i in range(N//2):
        ans1[N-i-1][1], ans1[i][1] =ans1[i][1], ans1[N-i-1][1]   # N//2번 정렬하고 위와 아래를 바꿔준다 밑에도 같음

    for j in range(N-1, -1, -1):
        for i in range(N):
            ans1[j][2] += str(arr[i][j])

    for i in range(N//2):
        ans1[N-i-1][2], ans1[i][2] = ans1[i][2], ans1[N-i-1][2]

    print(f'#{tc+1}')
    for line in ans1:
        print(*line)

 


후기

이 문제에 시간을 많이 썻다.

이유는 굳이 어렵게 한개의 리스트에 90도, 180도, 270도 돌린 것을 다 넣는 방식으로 풀라고 했기 때문.

다른 분들 코드를 보면 각자의 리스트를 만들어서 푸셨는데, 그게 더 간결하고 쉬운 방법인것같다.

 

일단, 설명을 추가하자면, 나는 입력받은 리스트의 정수 값들을 문자열화시켜 +해주는 방식으로 풀었다.

시간이 오래 걸린 이유는 for문을 두번써서 새로 만든 리스트에 넣어줘야하는데, 180도 부터는 for문 두번으로는

2차원 리스트의 인덱스를 맞추기가 어려웠다. 그래서 인덱스를 바꿔주는데 시간을 많이 썻다.

풀이에도 보면 나와있지만, 일정한 규칙을 가진 for문을 만들어 인덱스를 바꿔줘야한다.

 

복사했습니다!