백준 16927 배열 돌리기 2

gmlwlswldbs·2021년 9월 18일
0

코딩테스트

목록 보기
21/130
n, m, r = map(int, input().split())
a = [list(map(int, input().split())) for _ in range(n)]
k = min(n, m) // 2
b = [[] for _ in range(k)]
c = [[] for _ in range(k)]
for t in range(k):
    for j in range(t, m-1-t):
        b[t].append(a[t][j])
    for i in range(t, n-1-t):
        b[t].append(a[i][m-1-t])
    for j in range(m-1-t, t, -1):
        b[t].append(a[n-1-t][j])
    for j in range(n-1-t, t, -1):
        b[t].append(a[j][t])

for t in range(k):
    l = len(b[t])
    p = r % l
    for i in range(l):
        c[t].append(b[t][(i+p)%l])
        
ans = [[0] * m for _ in range(n)]

for t in range(k):
    cnt = 0
    for j in range(t, m-1-t):
        ans[t][j] = c[t][cnt]
        cnt += 1
    for i in range(t, n-1-t):
        ans[i][m-1-t] = c[t][cnt]
        cnt += 1
    for j in range(m-1-t, t, -1):
        ans[n-1-t][j] = c[t][cnt]
        cnt += 1
    for j in range(n-1-t, t, -1):
        ans[j][t] = c[t][cnt]
        cnt += 1
for row in ans:
    print(' '.join(map(str, row)))

배열 돌리기 1과의 차이점 : r의 크기가 매우 커질 수 있다 -> 나머지 연산을 통해 해결

0개의 댓글