문제 출처: https://www.acmicpc.net/problem/16926
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
    public static void main(String[] args) throws IOException {
        StringBuilder sb = new StringBuilder();
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer tokenizer = new StringTokenizer(reader.readLine());
        int N = Integer.parseInt(tokenizer.nextToken());
        int M = Integer.parseInt(tokenizer.nextToken());
        int R = Integer.parseInt(tokenizer.nextToken());
        int[][] matrix = new int[N][M];
        for (int i = 0; i < N; i++) {
            tokenizer = new StringTokenizer(reader.readLine());
            for (int j = 0; j < M; j++) {
                matrix[i][j] = Integer.parseInt(tokenizer.nextToken());
            }
        }
        while (R-- > 0) {
            int startRow = 0;
            int startCol = 0;
            int endRow = N - 1;
            int endCol = M - 1;
            int square = Math.min(N, M) / 2;
            while (square-- > 0) {
                int row0First = matrix[startRow][startCol];
                for (int i = startCol; i < endCol; i++) {
                    matrix[startRow][i] = matrix[startRow][i + 1];
                }
                for (int i = startRow; i < endRow; i++) {
                    matrix[i][endCol] = matrix[i + 1][endCol];
                }
                for (int i = endCol; i > startCol; i--) {
                    matrix[endRow][i] = matrix[endRow][i - 1];
                }
                for (int i = endRow; i > startRow + 1; i--) {
                    matrix[i][startCol] = matrix[i - 1][startCol];
                }
                matrix[startRow + 1][startCol] = row0First;
                startRow++;
                startCol++;
                endRow--;
                endCol--;
            }
        }
        for (int[] row : matrix) {
            for (int col : row) {
                sb.append(col).append(" ");
            }
            sb.append("\n");
        }
        System.out.println(sb);
    }
}
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
    public static void main(String[] args) throws IOException {
        StringBuilder sb = new StringBuilder();
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer tokenizer = new StringTokenizer(reader.readLine());
        int N = Integer.parseInt(tokenizer.nextToken());
        int M = Integer.parseInt(tokenizer.nextToken());
        int R = Integer.parseInt(tokenizer.nextToken());
        int[][] matrix = new int[N][M];
        int[][] directions = {
                { 1, 0 },
                { 0, 1 },
                { -1, 0 },
                { 0, -1 },
        };
        for (int i = 0; i < N; i++) {
            tokenizer = new StringTokenizer(reader.readLine());
            for (int j = 0; j < M; j++) {
                matrix[i][j] = Integer.parseInt(tokenizer.nextToken());
            }
        }
        int square = Math.min(N, M) / 2;
        while (R-- > 0) {
            for (int i = 0; i < square; i++) {
                int startRow = i;
                int startCol = i;
                int endRow = N - 1 - i;
                int endCol = M - 1 - i;
                int index = 0;
                int x = startRow;
                int y = startCol;
                int save = matrix[startRow][startCol];
                while (index < directions.length) {
                    int dx = x + directions[index][0];
                    int dy = y + directions[index][1];
                    if (dx >= startRow && dx <= endRow && dy >= startCol && dy <= endCol) {
                        int current = matrix[dx][dy];
                        matrix[dx][dy] = save;
                        save = current;
                        x = dx;
                        y = dy;
                    } else {
                        index++;
                    }
                }
            }
        }
        for (int i = 0; i < N; i++) {
            for (int j = 0; j < M; j++) {
                sb.append(matrix[i][j]).append(" ");
            }
            sb.append("\n");
        }
        System.out.println(sb);
    }
}