코딩하는 해맑은 거북이
[Python] 배열 돌리기 1 - 백준 본문
해당 글은 백준 16926번 문제 '배열 돌리기 1'을 다룬다.
문제
https://www.acmicpc.net/problem/16926
설명
해당 문제는 deque의 내장함수인 rotate를 사용해서 해결하였다.
배열의 겉부분 한줄씩 queue에 넣고 rotate 하여 수정된 arr를 출력해주면 된다.
코드
from collections import deque
n, m, r = map(int, input().split())
arr = []
for _ in range(n):
arr.append(list(map(int, input().split())))
dx = [0, 1, 0, -1]
dy = [1, 0, -1, 0]
def function(x, y, w, h, cnt):
q = deque()
nx, ny = x, y
for i in range(4):
while True:
nx = nx + dx[i]
ny = ny + dy[i]
if nx < cnt or nx >= w+cnt or ny < cnt or ny >= h+cnt:
nx, ny = nx - dx[i], ny - dy[i]
break
q.append(arr[nx][ny])
q.rotate(-r)
nx, ny = x, y
for i in range(4):
while True:
nx = nx + dx[i]
ny = ny + dy[i]
if nx < cnt or nx >= w+cnt or ny < cnt or ny >= h+cnt:
nx, ny = nx - dx[i], ny - dy[i]
break
arr[nx][ny] = q.popleft()
tx, ty = 0, 0
tn, tm = n, m
cnt = 0
while True:
if tn == 0 or tm == 0:
break
function(tx, ty, tn, tm, cnt)
tx += 1
ty += 1
tn -= 2
tm -= 2
cnt += 1
for i in range(n):
for j in range(m):
print(arr[i][j], end=' ')
print()
'코딩테스트' 카테고리의 다른 글
[Python] 연구소 - 백준 (BFS) (1) | 2023.08.23 |
---|---|
[Python] 숫자판 점프 - 백준 (DFS) (0) | 2023.08.23 |
[Python] 암기왕 - 백준 (0) | 2023.08.19 |
[Python] 이동하기 - 백준 (DP) (0) | 2023.08.15 |
[Python] 제곱수의 합 - 백준 (DP) (0) | 2023.08.15 |
Comments