구현/배열 돌리기1

Q·2021년 9월 2일
0

알고리즘/백준

목록 보기
38/70

문제 설명


문제

입력

첫째 줄에 배열의 크기 N, M과 수행해야 하는 회전의 수 R이 주어진다.

둘째 줄부터 N개의 줄에 배열 A의 원소 Aij가 주어진다.

출력

입력으로 주어진 배열을 R번 회전시킨 결과를 출력한다.


문제링크

전체 코드

import sys

input = sys.stdin.readline

def rotate(p, ll, rl, ul, dl):
    x, y = p, p
    d = 0
    while True:
        x, y = x+dx[d], y+dy[d]

        if x == ul or x == dl or y == ll or y == rl:
            x, y = x - dx[d], y - dy[d]
            d += 1
            x, y = x + dx[d], y + dy[d]

        if x == p and y == p:
            return
        
        matrix[p][p], matrix[x][y] = matrix[x][y], matrix[p][p]

n, m, r = map(int, input().split())

matrix = []
for i in range(n):
    matrix.append(list(map(int, input().split())))

dx = [1, 0, -1, 0]
dy = [0, 1, 0, -1]

for p in range(min(n,m) // 2):
    for _ in range(r%(2*(n + m - 4*p - 2))):
        rotate(p, p-1, m-p, p-1, n-p)

for e in matrix:
    print(*e)

해결 방법

이건 외우자!!

profile
Data Engineer

0개의 댓글