알고리즘(백준)/구현
[알고리즘/구현] 16926번 : 배열 돌리기 - python
되다
2023. 5. 9. 00:00
링크 : https://www.acmicpc.net/problem/16926
16926번: 배열 돌리기 1
크기가 N×M인 배열이 있을 때, 배열을 돌려보려고 한다. 배열은 다음과 같이 반시계 방향으로 돌려야 한다. A[1][1] ← A[1][2] ← A[1][3] ← A[1][4] ← A[1][5] ↓ ↑ A[2][1] A[2][2] ← A[2][3] ← A[2][4] A[2][5]
www.acmicpc.net
- 문제
- 소요시간: 30분 실패
- 설계하기(접근방법)
1. 입력받기
2. 구현
가장 중요한 고려 사항은 2가지이다
1. 외부 배열을 어떻게 돌릴 것인가?
2. 외부 배열 내부의 조그만 배열은 어떻게 고려할 것인가?
1번은 한칸씩 꼬리를 물며 구현하면 된다
2번은 그림을 그려 규칙을 찾았는데
n,m중에 작은 값을 2로 나누면 그것이 내부 배열의 갯수가 되어, 상하좌우로 한칸씩 축소된 배열을 읽어서 1번을 실행해주면 된다
- 코드(출력)
import sys
input = sys.stdin.readline
n, m, r = map(int, input().split())
arr = []
for _ in range(n):
arr.append(list(map(int, input().split())))
for k in range(r):
s = min(n, m) // 2
for j in range(s):
x, y = j, j
pre = arr[x][y]
for i in range(x + 1, n - j):
tmp = arr[i][j]
arr[i][j] = pre
pre = tmp
for i in range(y+1, m - j):
tmp = arr[n - 1 - j][i]
arr[n - 1 - j][i] = pre
pre = tmp
for i in range(n-j-2, j - 1, -1):
tmp = arr[i][m-1-j]
arr[i][m-1-j] = pre
pre = tmp
for i in range(m-2-j, j-1, -1):
tmp = arr[j][i]
arr[j][i] = pre
pre = tmp
for i in range(n):
for j in range(m):
print(arr[i][j], end=' ')
print()
- 얻어갈 부분
1. 이중배열을 어떻게 돌려야할지 참고했지만 아직 익숙하지 않다
2. 배열을 어떻게 연습할지 고민해보자