문제 링크
https://swexpertacademy.com/main/code/problem/problemDetail.do?problemLevel=2&contestProbId=AV5Pq-OKAVYDFAUq&categoryId=AV5Pq-OKAVYDFAUq&categoryType=CODE&problemTitle=&orderBy=INQUERY_COUNT&selectCodeLang=ALL&select-1=2&pageSize=10&pageIndex=2
문제
N x N 행렬이 주어질 때,
시계 방향으로 90도, 180도, 270도 회전한 모양을 출력하라.
[제약 사항]
N은 3 이상 7 이하이다.
입력
가장 첫 줄에는 테스트 케이스의 개수 T가 주어지고, 그 아래로 각 테스트 케이스가 주어진다.
각 테스트 케이스의 첫 번째 줄에 N이 주어지고,
다음 N 줄에는 N x N 행렬이 주어진다.
출력
출력의 첫 줄은 '#t'로 시작하고,
다음 N줄에 걸쳐서 90도, 180도, 270도 회전한 모양을 출력한다.
입력과는 달리 출력에서는 회전한 모양 사이에만 공백이 존재함에 유의하라.
(t는 테스트 케이스의 번호를 의미하며 1부터 시작한다.)
예제
입력
10
3
1 2 3
4 5 6
7 8 9
6
6 9 4 7 0 5
8 9 9 2 6 5
6 8 5 4 9 8
2 2 7 7 8 4
7 5 1 9 7 9
8 9 3 9 7 6
…
출력
출력의 첫 줄은 '#t'로 시작하고,
다음 N줄에 걸쳐서 90도, 180도, 270도 회전한 모양을 출력한다.
입력과는 달리 출력에서는 회전한 모양 사이에만 공백이 존재함에 유의하라.
(t는 테스트 케이스의 번호를 의미하며 1부터 시작한다.)
정답 및 풀이
t = int(input())
for tc in range(1, t+1):
n = int(input())
arr = [list(map(int, input().split())) for _ in range(n)]
rot90 = [[0]*n for _ in range(n)]
rot180 = [[0]*n for _ in range(n)]
rot270 = [[0]*n for _ in range(n)]
for i in range(n):
for j in range(n):
rot90[i][j] = arr[n-1-j][i]
for i in range(n):
for j in range(n):
rot180[i][j] = rot90[n-1-j][i]
for i in range(n):
for j in range(n):
rot270[i][j] = rot180[n-1-j][i]
print(f'#{tc}')
for i in range(n):
print("".join(map(str, rot90[i])),
"".join(map(str, rot180[i])),
"".join(map(str, rot270[i])))
- t = int(input())
- for tc in range(1, t+1):
- 테스트 케이스 번호를 1부터 시작해서 t까지 반복한다.
- n = int(input())
- arr = [list(map(int, input().split())) for _ in range(n)]
- n줄에 걸쳐 숫자를 입력받아 원본 배열 arr에 저장한다.
- rot90 = [[0]*n for _ in range(n)]
- 90도 회전 결과를 저장할 n×n 배열을 0으로 초기화한다.
- rot180 = [[0]*n for _ in range(n)]
- 180도 회전 결과를 저장할 n×n 배열을 0으로 초기화한다.
- rot270 = [[0]*n for _ in range(n)]
- 270도 회전 결과를 저장할 n×n 배열을 0으로 초기화한다.
- for i in range(n): for j in range(n): rot90[i][j] = arr[n-1-j][i]
- arr를 기준으로 90도 회전된 값을 rot90에 채운다.
- 회전 공식은 (i, j) ← (n-1-j, i) 이다.
- for i in range(n): for j in range(n): rot180[i][j] = rot90[n-1-j][i]
- 90도 회전 배열 rot90을 한 번 더 90도 회전시켜 180도 회전 배열 rot180을 만든다.
- 마찬가지로 (i, j) ← (n-1-j, i) 공식을 rot90에 적용한다.
- for i in range(n): for j in range(n): rot270[i][j] = rot180[n-1-j][i]
- 180도 회전 배열 rot180을 한 번 더 90도 회전시켜 270도 회전 배열 rot270을 만든다.
- 역시 (i, j) ← (n-1-j, i) 공식을 rot180에 적용한다.
- print(f'#{tc}')
- 출력 형식에 맞게 현재 테스트 케이스 번호를 출력한다.
- for i in range(n): print("".join(map(str, rot90[i])), "".join(map(str, rot180[i])), "".join(map(str, rot270[i])))
- i번째 행 기준으로180도 회전 결과 한 줄,공백 하나로 구분해서 출력한다.
- 270도 회전 결과 한 줄을
- 90도 회전 결과 한 줄,
- "".join(map(str, rot90[i])) 는 숫자 리스트를 붙여서 문자열로 만든다.