Stay Hungry Stay Foolish

SWEA

[SWEA] 1961. 숫자 배열 회전 (Python/D2)

dev스카이 2024. 10. 18. 16:06

[문제 링크] 👉 

 

SW Expert Academy

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

swexpertacademy.com

 


설명

N x N 행렬이 주어질 때,

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

 

[제약 사항]
N은 3 이상 7 이하이다.

 

풀이

1. 이중 리스트로 입력 받기

 num_list = []
    for _ in range(n):
        num_list.append(list(map(int, input().split())))

 

리스트 컴프리헨션을 사용해서 입력 받는 방법

num_list = [list(map(int, input().split())) for _ in range(n)]

 

 

2. 테스트 케이스 번호 출력

print("#%d" %tc)

 

 

3. 90도, 180도, 270도로 회전한 결과를 담을 리스트 생성

east = [[0 for _ in range(n)] for _ in range(n)]
north = [[0 for _ in range(n)] for _ in range(n)]
west = [[0 for _ in range(n)] for _ in range(n)]
  • 90도 = east, 180도 = north, 270도 = west로 구분했다.
  • N x N 만큼 이중 리스트를 생성한다.

 

4. 각자 회전시키고 생성한 리스트에 담는다.

    for i in range(n): 
        for j in range(n):
            east[i][j] = num_list[n-1-j][i] #90도
            north[i][j] = num_list[n-1-i][n-1-j] #180도
            west[i][j] = num_list[j][n-1-i] #270도

 

 

회전한 결과를 담은 리스트들을 출력하면 다음과 같다.

[[7, 4, 1], [8, 5, 2], [9, 6, 3]]
[[9, 8, 7], [6, 5, 4], [3, 2, 1]]
[[3, 6, 9], [2, 5, 8], [1, 4, 7]]
  • 출력할 양식에 맞춰서 출력하려면 각 리스트의 첫 번째 인덱스부터 마지막 인덱스까지 차례로 출력시켜야 한다.
  • 그래서 for문을 통해 출력하는데 공백이 없어야 하며 90도 따로, 180도 따로, 270도 따로 공백으로 구분해야 한다.

 

5. 결과 출력

    for i in range(n): 
        print(*east[i], sep='', end=' ')
        print(*north[i], sep='', end=' ')
        print(*west[i], sep='')

 

  • *리스트 : 리스트의 각 요소가 개별적으로 출력된다.
    • * 연산자는 리스트의 요소를 **언패킹(unpacking)**하여, 리스트 자체가 아닌 리스트의 각 요소를 전달한다.
    • 이를 통해 리스트의 요소를 공백을 기준으로 한 줄로 출력할 수 있다.
  • sep=' ' : 공백 없이 출력
  • end='  ' : 한 줄에 이어서 출력

 

Solution

test_case = int(input())
for tc in range(1, test_case + 1):
    n = int(input())
    num_list = []
    for _ in range(n):
        num_list.append(list(map(int, input().split())))
    print("#%d" %tc)
    
    east = [[0 for _ in range(n)] for _ in range(n)]
    north = [[0 for _ in range(n)] for _ in range(n)]
    west = [[0 for _ in range(n)] for _ in range(n)]
    
    for i in range(n):
        for j in range(n):
            east[i][j] = num_list[n-1-j][i] #90도
            north[i][j] = num_list[n-1-i][n-1-j] #180도
            west[i][j] = num_list[j][n-1-i] #270도

    for i in range(n):
        print(*east[i], sep='', end=' ')
        print(*north[i], sep='', end=' ')
        print(*west[i], sep='')

 

 

👩‍💻 회고

문제 이해와 회전시키는데까지는 별 문제 없었는데.. 출력시키는데 꽤 시간을 쏟았다. 후 그래도 원트에 성공해서 다행이다.