반응형
Input
5
3 4 1 2 3
2 3 4 5 6
2 3 4 6 7
1 7 6 5 4
6 8 9 3 4
Output
6 1 2 2 3
8 7 3 3 4
9 6 0 4 1
3 5 6 5 2
4 4 7 6 3
행렬을 90° 회전시 아래와 같이 원소를 배치하려는 경우 테두리별로 4개의 for문 이용해야 합니다.
n = int(input())
arr = [ list(map(int, input().split())) for i in range(n) ]
def rotate():
# arr[][]에 쓰기 동작을 위해서는 global 키워드 필요
global arr
temp = [[] for i in range(len(arr[0]))]
for i in range(n):
for j in range(n):
temp[i].append(0)
sr, sc = 0, 0
er, ec = n-1, 0
sLen = n-1
while True:
# 정방행렬 크기가 1이거나 0인 경우
if sLen <= 1:
break;
for i in range(sLen):
temp[sr][sc] = arr[er][ec]
sc = sc+1
er = er-1
for i in range(sLen):
temp[sr][sc] = arr[er][ec]
sr = sr + 1
ec = ec + 1
for i in range(sLen):
temp[sr][sc] = arr[er][ec]
sc = sc - 1
er = er + 1
for i in range(sLen):
temp[sr][sc] = arr[er][ec]
sr = sr - 1
ec = ec - 1
sLen = sLen - 2
sr, sc = sr + 1, sc + 1
er, ec = er - 1, ec + 1
arr = temp
# 90도 회전
rotate()
for i in range(n):
print(*arr[i])
Version 2
90° 회전을 아래와 같이 배치시킬 수 있습니다.
위 방법보다 더 구현하기 좋다.
n = int(input())
arr = [list(map(int, input().split())) for i in range(n)]
def rotate():
ret = [[0] * n for _ in range(n)]
for r in range(n):
for c in range(n):
ret[c][n-1-r] = arr[r][c]
return ret
arr = rotate()
for i in range(n):
print(*arr[i])
반응형
'알고리즘' 카테고리의 다른 글
알고리즘 문제에서 시간 복잡도는 어떻게 하는걸까? (빅-오) (0) | 2021.02.28 |
---|---|
행렬 90° 회전 (C 언어) (0) | 2021.02.28 |
PS시 자주 사용하는 함수 모음 (0) | 2021.02.28 |
BFS (Breadth-First Search, 너비 우선 탐색) (0) | 2021.02.27 |
깊이 우선 탐색(depth-first search, DFS) (0) | 2021.02.27 |
댓글