for문을 네 번 돌려 직접 회전시켜준다. 인덱스 범위랑 행/열 헷갈리지 않기!
#include <vector>
#include <algorithm> // min
#define MAX 101
using namespace std;
vector<int> solution(int rows, int columns, vector<vector<int>> queries) {
vector<int> answer;
int arr[MAX][MAX];
int result, T, x1, x2, y1, y2, start, i, j, k;
for (i = 1; i <= rows; i++) {
for (j = 1; j <= columns; j++) arr[i][j] = (i - 1) * columns + j;
}
T = queries.size();
for (k = 0; k < queries.size(); k++) {
result = rows * columns;
x1 = queries[k][0]; // x: col
x2 = queries[k][2];
y1 = queries[k][1]; // y: row
y2 = queries[k][3];
start = arr[x1][y1]; // 직사각형의 왼쪽 위
result = min(result, start);
for (i = x1; i < x2; i++) { // 왼쪽 테두리 이동
arr[i][y1] = arr[i + 1][y1];
result = min(result, arr[i][y1]);
}
for (i = y1; i < y2; i++) { // 아래쪽 테두리 이동
arr[x2][i] = arr[x2][i + 1];
result = min(result, arr[x2][i]);
}
for (i = x2; i > x1; i--) { // 오른쪽 테두리
arr[i][y2] = arr[i - 1][y2];
result = min(result, arr[i][y2]);
}
for (i = y2; i > y1; i--) { // 위쪽 테두리
arr[x1][i] = arr[x1][i - 1];
result = min(result, arr[x1][i]);
}
arr[x1][y1 + 1] = start;
answer.push_back(result);
}
return answer;
}