문제링크
https://www.acmicpc.net/problem/16926
코드 제출 기록 (메모리 및 시간)
메모리 : KB
시간 : ms
Code
열심히 풀었는데... 시간초과 무슨 일....
##################### 시간 초과 ############################
# 배열 사각형 1개 1바퀴 돌리기
def Rotate_Square(i, N, M, arr):
saero = N - i
garo = M - i
start = i
temp = [[0 for _ in range(M)] for _ in range(N)]
for i in range(0, N):
for j in range(0, M):
temp = move_point(i, j, start, saero, garo, arr, temp)
return temp
# arr 배열의 i, j 번째를 temp 배열에 돌려서 저장
def move_point(i, j, start, saero, garo, arr, temp):
if (i == start and start < j <= garo - 1): # 1
temp[i][j-1] = arr[i][j]
elif (start <= i < saero - 1 and j == start): # 2
temp[i+1][j] = arr[i][j]
elif (i == saero - 1 and start <= j < garo - 1): # 3
temp[i][j+1] = arr[i][j]
elif (start < i <= saero - 1 and j == garo - 1): # 4
temp[i-1][j] = arr[i][j]
else: # 5
temp[i][j] = arr[i][j]
return temp
# 배열 최종 출력
def my_print(arr):
for i in range(N):
for j in range(M):
print(arr[i][j], "", end = "")
print()
N, M, R = map(int, input().split())
arr =[[0 for _ in range(M)] for _ in range(N)]
for i in range(N):
arr[i] = list(map(int, input().split())) # arr 입력받기
square_num = min(N, M) // 2 # 사각형의 개수
rotate_num = R % 2*(N+M-2) # 회전하는 수 (4*4 사각형이면 2번 도는 것고 14번 도는 것이 같음!)
for _ in range(R):
for i in range(square_num):
arr = Rotate_Square(i, N, M, arr)
my_print(arr)
Python
복사
메모
•
min(N, M) mod 2 = 0 이기 때문에 반시계방향으로 회전을 할때 중간에 껴서(?) 안돌아가는 숫자가 있을 확률은 없다!
<회전하는 경우의 수>
1. 세로 : 짝수 / 가로 : 홀수
2. 세로 : 홀수 / 가로 : 짝수
3. 세로 : 짝수 / 가로 : 짝수
•
회전하는 사각형의 수 = min(N, M) / 2 개
•
회전하는 횟수 = R % ( 2*(N+M-2) ) → (4*4 사각형이면 2번 도는 것고 14번 도는 것이 같음!)
•