풀긴 풀었으나,
pypy3으로 돌려야 시간초과 안난다 ㅠㅠ
파이썬으로 돌리면 시간 초과...
좀 더 연구해보자
효과적인 방법을..!
n, m, r = map(int, input().split())
array = [list(map(int, input().split())) for _ in range(n)]
def rotate():
global array
cut_line = min(n, m) // 2
for _ in range(r):
fr, br = 0, n - 1 # 기준점 좌표
fc, bc = 0, m - 1
while cut_line and fr < cut_line:
key = array[fr][fc]
fr_br = br - fr # 행
fc_bc = bc - fc # 열
# 1번, 좌
array[fr][fc:bc] = array[fr][fc + 1:bc + 1]
# 2번, 상
cnt = 0
for _ in range(fr_br):
array[fr + cnt][bc] = array[fr + cnt + 1][bc]
cnt += 1
# 3번, 우
array[br][fc + 1:bc + 1] = array[br][fc:bc]
# 4번, 하
cnt = 0
for _ in range(fr_br):
# print(fr+br-cnt,fr+br-cnt-1)
# array[fr + br - cnt][fc] = array[fr + br - cnt - 1][fc]
array[br - cnt][fc] = array[br - cnt - 1][fc]
cnt += 1
array[fr + 1][fc] = key
fr += 1
br -= 1
fc += 1
bc -= 1
rotate()
for i in range(n):
for j in range(m):
print(array[i][j], end=' ')
print()
아래 코드는 pypy3으로 해도 초과난다 ㅎㅎ
deepcopy 때문인 듯 ㅠㅠ
이 문제에서는 deepcopy를 하지 않아도 문제가 잘 풀린다!
근데 주의해야할 것은
탐색 순서!!
맨 왼쪽 상단값은 탐색 전 key에 담아둔다!
그리고 모든 방향 탐색을 마치면,
마지막에 array[fr+1][fc]로 해주면 된다!!
from copy import deepcopy
n, m, r = map(int, input().split())
array = [list(map(int, input().split())) for _ in range(n)]
# n,m 중 작은 값이 짝수여야 함. -> 즉 좌,하,우,상 회전을 다 한다는 뜻
# (0,0), (1,1) 기준값이 행//2 보다 커야함.
# 좌,하,우,상
def rotate():
global array
cut_line = n // 2
for _ in range(r):
fr, br = 0, n - 1 # 기준점 좌표
fc, bc = 0, m - 1
ex_array = deepcopy(array)
while fr < cut_line:
fr_br = br - fr # 행
fc_bc = bc - fc # 열
# 1번, 좌
cnt = 0
for _ in range(fc_bc):
ex_array[fr][fc + cnt] = array[fr][fc + 1 + cnt]
cnt += 1
# 2번, 하
cnt = 0
for _ in range(fr_br):
ex_array[fr + cnt + 1][fc] = array[fr + cnt][fc]
cnt += 1
# 3번, 우
cnt = 0
for _ in range(fc_bc):
ex_array[br][fc + 1 + cnt] = array[br][fc + cnt]
cnt += 1
# 4번, 상
cnt = 0
for _ in range(fr_br):
ex_array[fr + cnt][bc] = array[fr + cnt + 1][bc]
cnt += 1
fr += 1
br -= 1
fc += 1
bc -= 1
array = deepcopy(ex_array)
rotate()
for i in range(n):
for j in range(m):
print(array[i][j],end=' ')
print()
> 시간 초과가 떠버렸다 ㅜㅠ
다시 고쳐야지...
'여니의 취준 준비 > 코딩테스트 (Python)' 카테고리의 다른 글
[n20207] 달력 (0) | 2021.08.24 |
---|---|
[n17276] 배열 돌리기 (in python) (0) | 2021.05.29 |
[n2615] 오목 (in python) (0) | 2021.05.26 |
[n17413] 단어 뒤집기 2 (in python) (0) | 2021.05.25 |
[n20436] ZOAC 3 in python (0) | 2021.05.21 |