단순히 정해진 범위의 직사각형의 테두리를 회전시켜주고 이때 테두리값들중 가장작은값을 결과값으로 가져오면 되는 문제이다.
#include <string>
#include <vector>
using namespace std;
vector<int> solution(int rows, int columns, vector<vector<int>> queries)
{
vector<int> answer;
vector<vector<int>> board;
for(int i=0;i<rows;i++)
{//기초 배열 생성
vector<int> tmp(columns);
for(int j=0;j<columns;j++) tmp[j] = i * columns + j + 1;
board.push_back(tmp);
}
for(auto query : queries)
{
int x1 = query[0]-1, y1 = query[1]-1, x2 = query[2]-1, y2 = query[3]-1;
int num = board[x1][y1], tmp;//맨처음 숫자 num, 교체할때 임시로 담아둘 tmp
int min_num = num;
//시계방향으로 숫자 변경
for(int j=y1+1;j<=y2;j++)
{
tmp = board[x1][j];
board[x1][j] = num;
num = tmp;
min_num = min(min_num, num);
}
for(int i=x1+1;i<=x2;i++)
{
tmp = board[i][y2];
board[i][y2] = num;
num = tmp;
min_num = min(min_num, num);
}
for(int j=y2-1;j>=y1;j--)
{
tmp = board[x2][j];
board[x2][j] = num;
num = tmp;
min_num = min(min_num, num);
}
for(int i=x2-1;i>=x1;i--)
{
tmp = board[i][y1];
board[i][y1] = num;
num = tmp;
min_num = min(min_num, num);
}
answer.push_back(min_num);
}
return answer;
}