🗒️ 파이썬 코드 풀이
def rotation(lst,N):
tmp_lst = []
for j in range(N):
tmp = []
for i in range(N-1,-1,-1):
tmp.append(str(lst[i][j]))
tmp_lst.append(tmp)
return tmp_lst
T = int(input())
for test_case in range(1, T + 1):
N = int(input())
lst_origin = [list(map(int, input().split())) for _ in range(N)]
lst_90 = [[0] * N for _ in range(N)]
lst_180 = [[0] * N for _ in range(N)]
lst_270 = [[0] * N for _ in range(N)]
lst_90 = rotation(lst_origin,N)
lst_180 = rotation(lst_90,N)
lst_270 = rotation(lst_180, N)
print(f"#{test_case}")
for i in range(N):
print(''.join(lst_90[i]), end=" ")
print(''.join(lst_180[i]), end=" ")
print(''.join(lst_270[i]), end=" ")
print()
1. 먼저 필요한 기능은 90,180,270도 회전이다.
(90도만 구현하면 나머지는 연쇄적으로 가능하니 사실상 90도만 구현하면 된다.)
2. 기존의 리스트를 입력 받고, N*N 크기에 맞춰 90,180,270도 회전 리스트 형태를 만들어준다.
3. 1번 이상 쓰기 때문에 rotation 함수를 만들어준다.
[0,0] [0,1] [0,2] [2,0] [1,0] [0,0]
[1,0] [1,1] [1,2] => [2,1] [1,1] [0,1]
[2,0] [2,1] [2,2] [2,2] [1,2] [0,2]
90도로 회전을 하고 , 모형을 보면 어떤식으로 for문을 돌릴지 감이 잡힌다.
해당 상황에 맞는 for문을 rotation 함수에 작성하면 된다.
(적절한 출력을 위해 문자열로 변경함)
🧐 문제 코멘트
D2여서 문제 구현이 어렵지는 않다.
다만 처음 출력 값을 봤을때, 이게 어떻게해서 이렇게 나온거지 좀 생각이 필요했다.
값으로만 보면 헷갈리는데, 로테이션 인덱스를 보고 규칙성을 파악하니 쉬운 문제였다.
📚 문제
N x N 행렬이 주어질 때,
시계 방향으로 90도, 180도, 270도 회전한 모양을 출력하라.
[제약 사항]
N은 3 이상 7 이하이다.
[입력]
가장 첫 줄에는 테스트 케이스의 개수 T가 주어지고, 그 아래로 각 테스트 케이스가 주어진다.
각 테스트 케이스의 첫 번째 줄에 N이 주어지고,
다음 N 줄에는 N x N 행렬이 주어진다.
[출력]
출력의 첫 줄은 '#t'로 시작하고,
다음 N줄에 걸쳐서 90도, 180도, 270도 회전한 모양을 출력한다.
입력과는 달리 출력에서는 회전한 모양 사이에만 공백이 존재함에 유의하라.
(t는 테스트 케이스의 번호를 의미하며 1부터 시작한다.)
'알고리즘 > 알고리즘_swea' 카테고리의 다른 글
[Python][SWEA] 4299. 태혁이의 사랑은 타이밍 D3 (0) | 2024.05.13 |
---|---|
[Python][SWEA] 14178. 1차원 정원 D3 (0) | 2024.05.13 |
[Python][SWEA] 3131. 100만 이하의 모든 소수 D3 (0) | 2024.05.12 |
[Python][SWEA] 9280. 진용이네 주차타워 D3 (0) | 2024.05.12 |
[Python][SWEA] 3307. 최장 증가 부분 수열 D3 (0) | 2024.05.11 |