💻 C++ 기반
코딩테스트 연습 - 행렬 테두리 회전하기
https://programmers.co.kr/learn/courses/30/lessons/77485?language=cpp
✔️ 시작점의 원소를 미리 저장해두기
✔️ 회전하는 방향의 '반대 방향'으로 탐색하면서 2차원 배열 갱신
✔️ 아이디어 참고용(링크)
#include <string>
#include <vector>
#include <algorithm>
#define MAX 101
using namespace std;
int board[MAX][MAX];
int dirRow[4] = {0, -1, 0, 1}; // 동북서남
int dirCol[4] = {1, 0, -1, 0};
vector<int> solution(int rows, int columns, vector<vector<int>> queries) {
vector<int> answer;
for (int i = 1; i <= rows; i++)
{
for (int j = 1; j <= columns; j++)
{
board[i][j] = (i - 1) * columns + j;
}
}
for (int i = 0; i < queries.size(); i++)
{
int x1 = queries[i][0];
int y1 = queries[i][1];
int x2 = queries[i][2];
int y2 = queries[i][3];
int sz = (x2 - x1 + y2 - y1) * 2;
int dir = 2;
int curRow = x1;
int curCol = y1;
vector<int> v;
int temp = board[curRow][curCol];
for (int j = 0; j < sz; j++)
{
if (curRow == x1 && curCol == y1 || curRow == x2 && curCol == y1 || curRow == x2 && curCol == y2 || curRow == x1 && curCol == y2)
{
dir = (dir + 1) % 4;
}
if (j == sz - 1)
{
v.push_back(temp);
board[curRow][curCol] = temp;
}
else
{
int nextRow = curRow + dirRow[dir];
int nextCol = curCol + dirCol[dir];
v.push_back(board[nextRow][nextCol]);
board[curRow][curCol] = board[nextRow][nextCol];
curRow = nextRow;
curCol = nextCol;
}
}
sort(v.begin(), v.end());
answer.push_back(v[0]);
}
return answer;
}