[programmers] 행렬 테두리 회전하기

https://school.programmers.co.kr/learn/courses/30/lessons/77485

class Solution {
    public int[] solution(int rows, int columns, int[][] queries) {
        int len = queries.length;
        int[] answer = new int[len];
        int[][] blocks = new int[rows][columns];
        
        int cnt = 1;
        for(int i = 0 ; i < rows ; i++){
            for(int j = 0 ; j < columns ; j++){
                blocks[i][j] = cnt++;
            }
        }
        
        for(int i = 0 ; i < len ; i++){
            answer[i] = moveBlock(queries[i], blocks);
        }
        
        return answer;
    }
    
    private int moveBlock(int[] query, int[][] matrix){
        int x1 = query[0] - 1;
        int y1 = query[1] - 1;
        int x2 = query[2] - 1;
        int y2 = query[3] - 1;

		int temp = matrix[x1][y1];
		int min = temp;
		
		for(int i=x1; i<x2; i++) {
			matrix[i][y1] = matrix[i + 1][y1];
			min = Math.min(min, matrix[i][y1]);
		}

		for(int i=y1; i<y2; i++) {
			matrix[x2][i] = matrix[x2][i + 1];
			min = Math.min(min, matrix[x2][i]);
		}

		for(int i=x2; i>x1; i--) {
			matrix[i][y2] = matrix[i - 1][y2];
			min = Math.min(min, matrix[i][y2]);
		}

		for(int i=y2; i>y1; i--) {
			matrix[x1][i] = matrix[x1][i - 1];
			min = Math.min(min, matrix[x1][i]);
		}
		matrix[x1][y1 + 1] = temp;
		return min;
    }
}

© 2023 Lee. All rights reserved.