테두리의 한 변당 for문을 1개씩 써서 하나하나 모두 옮겨주는 방식으로 구현했다. 추가적으로 각 변을 탐색할 때 숫자의 최소값을 찾아 answer 배열에 추가해주었다.
class Solution {
static int[][] arr;
static int rotate(int x1, int y1, int x2, int y2) {
int min = Integer.MAX_VALUE/2;
int[][] copy = new int[arr.length][arr[0].length];
for(int i=0; i<arr.length; i++) {
for(int j=0; j<arr[i].length; j++) {
copy[i][j] = arr[i][j];
}
}
for(int c=y1+1; c<=y2; c++) {
arr[x1][c] = copy[x1][c-1];
if(arr[x1][c]<min) min = arr[x1][c];
}
for(int r=x1+1; r<=x2; r++) {
arr[r][y2] = copy[r-1][y2];
if(arr[r][y2]<min) min = arr[r][y2];
}
for(int c=y2-1; c>=y1; c--) {
arr[x2][c] = copy[x2][c+1];
if(arr[x2][c]<min) min = arr[x2][c];
}
for(int r=x2-1; r>=x1; r--) {
arr[r][y1] = copy[r+1][y1];
if(arr[r][y1]<min) min = arr[r][y1];
}
return min;
}
public int[] solution(int rows, int columns, int[][] queries) {
int[] answer = new int[queries.length];
arr = new int[rows+1][columns+1];
int cnt = 0;
for(int i=0; i<rows; i++) {
for(int j=0; j<columns; j++) {
arr[i+1][j+1] = ++cnt;
}
}
for(int i=0; i<queries.length; i++) {
int min = rotate(queries[i][0],queries[i][1],queries[i][2],queries[i][3]);
answer[i] = min;
}
return answer;
}
}
행렬 돌리기는 이 문제처럼 메인으로 다루기보다는 구현 문제의 일부로 종종 나오기 때문에 여러번 익혀보는 것이 좋을 것 같다. (여러 문제를 풀어본 결과 단순히 반복문을 여러개 나열해서 구현 하는게 시간상으로 제일 편한 듯..?)