Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | |||
| 5 | 6 | 7 | 8 | 9 | 10 | 11 |
| 12 | 13 | 14 | 15 | 16 | 17 | 18 |
| 19 | 20 | 21 | 22 | 23 | 24 | 25 |
| 26 | 27 | 28 | 29 | 30 |
Tags
- RDS
- AWS
- SSL
- API
- 백업
- HTTP 상태 코드
- REST API 설계
- CD
- 프리티어
- ec2 rds 연결
- Prometheus
- 인증
- 마이그레이션
- DDos
- nginx
- 자동 배포
- postgresql
- spring
- RDS생성
- aop
- REST
- 서버
- Grafana
- CRUD
- springboot
- log
- 복구
- restful
- EC2 인스턴스 생성
- EC2
Archives
- Today
- Total
SU_DING_GI
[16926] 배열 돌리기 1 본문
728x90
문제
크기가 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]
↓ ↓ ↑ ↑
A[3][1] A[3][2] → A[3][3] → A[3][4] A[3][5]
↓ ↑
A[4][1] → A[4][2] → A[4][3] → A[4][4] → A[4][5]
예를 들어, 아래와 같은 배열을 2번 회전시키면 다음과 같이 변하게 된다.
1 2 3 4 2 3 4 8 3 4 8 6
5 6 7 8 1 7 7 6 2 7 8 2
9 8 7 6 → 5 6 8 2 → 1 7 6 3
5 4 3 2 9 5 4 3 5 9 5 4
<시작> <회전1> <회전2>
배열과 정수 R이 주어졌을 때, 배열을 R번 회전시킨 결과를 구해보자.
입력
첫째 줄에 배열의 크기 N, M과 수행해야 하는 회전의 수 R이 주어진다.
둘째 줄부터 N개의 줄에 배열 A의 원소 Aij가 주어진다.
출력
입력으로 주어진 배열을 R번 회전시킨 결과를 출력한다.
제한
- 2 ≤ N, M ≤ 300
- 1 ≤ R ≤ 1,000
- min(N, M) mod 2 = 0
- 1 ≤ Aij ≤ 108
예제 입력 1
4 4 2
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16
예제 출력 1
3 4 8 12
2 11 10 16
1 7 6 15
5 9 13 14
예제 입력 2
5 4 7
1 2 3 4
7 8 9 10
13 14 15 16
19 20 21 22
25 26 27 28
예제 출력 2
28 27 26 25
22 9 15 19
16 8 21 13
10 14 20 7
4 3 2 1
예제 입력 3
2 2 3
1 1
1 1
예제 출력 3
1 1
1 1
풀이
겉껍질을 먼저돌려주고 그다음 속 껍질을 돌리는 방식으로 코드를 구현했다. 그냥 Python3로 제출했을 때는 시간초과 인데 pypy로 제출했을 때는 통과하였는데 왜 인지 궁금해졌다
N, M, R = map(int, input().split())
arr = [list(map(int, input().split())) for _ in range(N)]
for _ in range(R):
for i in range(min(N, M) // 2):
x, y = i, i
tmp = arr[x][y]
for j in range(i + 1, N - i):
x = j
now = arr[x][y]
arr[x][y] = tmp
tmp = now
for j in range(i + 1, M - i):
y = j
now = arr[x][y]
arr[x][y] = tmp
tmp = now
for j in range(N - i - 2, i - 1, -1):
x = j
now = arr[x][y]
arr[x][y] = tmp
tmp = now
for j in range(M - i - 2, i - 1, -1):
y = j
now = arr[x][y]
arr[x][y] = tmp
tmp = now
for i in range(N):
for j in range(M):
if j != M - 1:
print(arr[i][j], end=' ')
else:
print(arr[i][j])'CODING TEST > Algorithm Problem' 카테고리의 다른 글
| [10989] 수 정렬하기 3 (5) | 2024.03.05 |
|---|---|
| [15686] 치킨 배달 (3) | 2024.03.04 |
| [18111] 마인크래프트 (0) | 2024.03.04 |
| [1966] 프린터 큐 (0) | 2024.03.03 |
| [9251] LCS (0) | 2024.02.29 |