[문제 링크] 👉
설명
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='')
👩💻 회고
문제 이해와 회전시키는데까지는 별 문제 없었는데.. 출력시키는데 꽤 시간을 쏟았다. 후 그래도 원트에 성공해서 다행이다.
'SWEA' 카테고리의 다른 글
[SWEA] 1948. 날짜 계산기 (Python/D2) (0) | 2024.10.18 |
---|---|
[SWEA] 1959. 두 개의 숫자열 (Python/D2) (1) | 2024.10.18 |
[SWEA] 1976. 시각 덧셈 (Python/D2) (0) | 2024.10.16 |
[SWEA] 1284. 수도 요금 경쟁 (Python/D2) (4) | 2024.10.16 |
[SWEA] 1945. 소인수분해 (Python/D2) (0) | 2024.10.16 |