이 문제는 단순 구현 문제입니다.
for(int i=0; i<q.size(); i++){
vector<int> tmp;
vector<pair<int,int>> xy;
int mn = 1e9;
int sty = q[i][0];
int stx = q[i][1];
int eny = q[i][2];
int enx = q[i][3];
...
}
편의성을 위해 시작 좌표와 끝 좌표 변수를 만들어줍니다.
// 오른쪽
for(int i=stx; i<=enx; i++){
tmp.push_back(board[sty][i]);
mn = min(mn, board[sty][i]);
xy.push_back({sty,i});
}
// 아래
for(int i=sty+1; i<=eny; i++){
tmp.push_back(board[i][enx]);
mn = min(mn, board[i][enx]);
xy.push_back({i, enx});
}
// 왼쪽
for(int i=enx-1; i>= stx; i--){
tmp.push_back(board[eny][i]);
mn = min(mn, board[eny][i]);
xy.push_back({eny, i});
}
// 위
for(int i=eny-1; i>= sty+1; i--){
tmp.push_back(board[i][stx]);
mn = min(mn, board[i][stx]);
xy.push_back({i, stx});
}
시작점을 기준으로 시계 방향으로 오른쪽, 아래, 왼쪽, 위에 해당하는 숫자들을 tmp 벡터에 넣어줍니다.
xy 벡터는 시계 방향으로 한 칸 움직인 숫자들을 넣을 좌표를 저장합니다.
rotate(tmp.rbegin(), tmp.rbegin()+1, tmp.rend());
algorithm 헤더에 rotate 함수를 이용해서 오른쪽으로 한 칸 이동시켜주었습니다.
rotate(tmp.begin(), tmp.begin()+1, tmp.end())
으로 하면 왼쪽으로 한 칸 이동시킵니다.
for(int i=0; i<xy.size(); i++){
board[xy[i].first][xy[i].second] = tmp[i];
}
앞에서 저장해준 xy 좌표들을 순서대로 한 칸 이동한 숫자들을 넣어줍니다.
#include <string>
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int board[104][104];
vector<int> solution(int r, int c, vector<vector<int>> q) {
vector<int> answer;
int cnt = 1;
for(int i=1; i<= r; i++){
for(int j=1; j<=c; j++){
board[i][j] = cnt;
cnt++;
}
}
for(int i=0; i<q.size(); i++){
vector<int> tmp;
vector<pair<int,int>> xy;
int mn = 1e9;
int sty = q[i][0];
int stx = q[i][1];
int eny = q[i][2];
int enx = q[i][3];
// 오른쪽
for(int i=stx; i<=enx; i++){
tmp.push_back(board[sty][i]);
mn = min(mn, board[sty][i]);
xy.push_back({sty,i});
}
// 아래
for(int i=sty+1; i<=eny; i++){
tmp.push_back(board[i][enx]);
mn = min(mn, board[i][enx]);
xy.push_back({i, enx});
}
// 왼쪽
for(int i=enx-1; i>= stx; i--){
tmp.push_back(board[eny][i]);
mn = min(mn, board[eny][i]);
xy.push_back({eny, i});
}
// 위
for(int i=eny-1; i>= sty+1; i--){
tmp.push_back(board[i][stx]);
mn = min(mn, board[i][stx]);
xy.push_back({i, stx});
}
rotate(tmp.rbegin(), tmp.rbegin()+1, tmp.rend());
for(int i=0; i<xy.size(); i++){
board[xy[i].first][xy[i].second] = tmp[i];
}
answer.push_back(mn);
}
return answer;
}