[programmers] 행렬 테두리 회전하기
in Algorithm on Algorithm
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;
}
}