import java.util.*;

class Solution {
    public int[] solution(int rows, int columns, int[][] queries) {
        int[] answer = new int[queries.length];
        int[][] arr = new int[rows][columns];
        int value = 1;
        
        for(int i=0; i<rows; i++) {
            for(int j=0; j<columns; j++) { arr[i][j] = value++; }
        }
        
        for(int i=0; i<queries.length; i++) {
            int x1 = queries[i][0]-1; int y1 = queries[i][1]-1;
            int x2 = queries[i][2]-1; int y2 = queries[i][3]-1;

            answer[i] = min(arr, x1, y1, x2, y2);
            
            int x1y2 = arr[x1][y2];
            int x2y1 = arr[x2][y1];
            int x2y2 = arr[x2][y2];
            
            for(int j=y2; j>y1; j--) { arr[x1][j] = arr[x1][j-1]; }
            for(int j=x2; j>x1+1; j--) { arr[j][y2] = arr[j-1][y2]; }
            for(int j=y1; j<y2-1; j++) { arr[x2][j] = arr[x2][j+1]; }
            for(int j=x1; j<x2-1; j++) { arr[j][y1] = arr[j+1][y1]; }
            
            arr[x1+1][y2] = x1y2;
            arr[x2-1][y1] = x2y1;
            arr[x2][y2-1] = x2y2;
        }
        
        return answer;
    }
    
    public int min(int[][] arr, int x1, int y1, int x2, int y2) {
        int min = Integer.MAX_VALUE;
        
        for(int i=x1; i<=x2; i++) {
            min = Math.min(min, arr[i][y1]);
            min = Math.min(min, arr[i][y2]);
        }
        
        for(int i=y1; i<=y2; i++) {
            min = Math.min(min, arr[x1][i]);
            min = Math.min(min, arr[x2][i]);
        }
        
        return min;
    }
}

'Problem Solving > Programmers' 카테고리의 다른 글

[Level 2] [1차] 뉴스 클러스터링  (0) 2022.03.31
[Level 2] 짝지어 제거하기  (0) 2022.03.31
[Level 2] 타겟 넘버  (0) 2022.03.31
[Level 2] 더 맵게  (0) 2022.03.31
[Level 2] 기능개발  (0) 2022.03.31