백준 16926 배열 돌리기 1

gmlwlswldbs·2021년 9월 18일
0

코딩테스트

목록 보기
20/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])
    for i in range(l):
        c[t].append(b[t][(i+r)%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. 이차원 리스트를 그룹을 만들어 일차원 리스트로 만듬
2. 나머지 연산을 통해 일차원 리스트의 순서를 바꿈
3. 순서 바꾼 일차원 리스트를 다시 이차원 리스트로 만듬

0개의 댓글