Search
Duplicate
🥈

배열 돌리기 1

주차
14
문제번호
16926
언어
Python
티어
실버
유형
구현
nj_Blog
X
nj_상태
다시 풀기
이해도
풀이
사람
이해도 2
13 more properties

문제링크

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번 도는 것이 같음!)