• + 0 comments

    import java.io.; import java.util.; import java.util.stream.*;

    class Result {

    public static void matrixRotation(List<List<Integer>> matrix, int r) {
        int m = matrix.size();
        int n = matrix.get(0).size();
        int layers = Math.min(m, n) / 2;
    
        for (int layer = 0; layer < layers; layer++) {
            List<Integer> elements = new ArrayList<>();
    
            // Top row
            for (int i = layer; i < n - layer; i++) {
                elements.add(matrix.get(layer).get(i));
            }
            // Right column
            for (int i = layer + 1; i < m - layer - 1; i++) {
                elements.add(matrix.get(i).get(n - layer - 1));
            }
            // Bottom row
            for (int i = n - layer - 1; i >= layer; i--) {
                elements.add(matrix.get(m - layer - 1).get(i));
            }
            // Left column
            for (int i = m - layer - 2; i > layer; i--) {
                elements.add(matrix.get(i).get(layer));
            }
    
            int len = elements.size();
            int rot = r % len;
    
            List<Integer> rotated = new ArrayList<>();
            rotated.addAll(elements.subList(rot, len));
            rotated.addAll(elements.subList(0, rot));
    
            int index = 0;
    
            // Top row
            for (int i = layer; i < n - layer; i++) {
                matrix.get(layer).set(i, rotated.get(index++));
            }
            // Right column
            for (int i = layer + 1; i < m - layer - 1; i++) {
                matrix.get(i).set(n - layer - 1, rotated.get(index++));
            }
            // Bottom row
            for (int i = n - layer - 1; i >= layer; i--) {
                matrix.get(m - layer - 1).set(i, rotated.get(index++));
            }
            // Left column
            for (int i = m - layer - 2; i > layer; i--) {
                matrix.get(i).set(layer, rotated.get(index++));
            }
        }
    
        // Print the rotated matrix
        for (List<Integer> row : matrix) {
            System.out.println(row.stream().map(Object::toString).collect(Collectors.joining(" ")));
        }
    }
    

    }

    public class Solution { public static void main(String[] args) throws IOException { BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));

        String[] firstMultipleInput = bufferedReader.readLine().replaceAll("\\s+$", "").split(" ");
        int m = Integer.parseInt(firstMultipleInput[0]);
        int n = Integer.parseInt(firstMultipleInput[1]);
        int r = Integer.parseInt(firstMultipleInput[2]);
    
        List<List<Integer>> matrix = new ArrayList<>();
    
        IntStream.range(0, m).forEach(i -> {
            try {
                matrix.add(
                    Stream.of(bufferedReader.readLine().replaceAll("\\s+$", "").split(" "))
                        .map(Integer::parseInt)
                        .collect(Collectors.toList())
                );
            } catch (IOException ex) {
                throw new RuntimeException(ex);
            }
        });
    
        Result.matrixRotation(matrix, r);
    
        bufferedReader.close();
    }
    

    }