문제
https://school.programmers.co.kr/learn/courses/30/lessons/77485
주어진 행렬에서 주어진 부분의 테두리를 회전시키는 문제였다.
문제 풀이
100 x 100 크기의 행렬이 최대였고 최대 회전수가 10000이었기 때문에 40 * 10000을 했을 때 400000이어서 마음 편하게 반복문을 사용했다.
#include <string>
#include <vector>
using namespace std;
vector<vector<int>> map;
void printMap(int row, int col){
for(int i=1;i<=row;i++){
for(int j=1;j<=col;j++){
printf("%d ",map[i][j]);
}
printf("\n");
}
printf("\n");
}
int rotation(vector<int> query){
int t;
int min = 100000;
int beforeNum;
int maxX, maxY, startX, startY, x, y;
startX = query[0]; //행
startY = query[1]; //열
maxX = query[2];
maxY = query[3];
x = startX;
y = startY+1;
beforeNum = map[startX][startY];
while(1){
t = map[x][y];
map[x][y] = beforeNum;
beforeNum = t;
//printf("%d ",map[x][y]);
if(map[x][y] < min) min = map[x][y];
if(x == startX && y == startY){ //종료 조건
printf("\n");
return min;
}
else if(x == startX){ //→
if(y == maxY){
x++;
}
else y++;
}
else if(y == maxY){ //↑
if(x == maxX){
y--;
}
else x++;
}
else if(x == maxX){ //←
if(y == startY){
x--;
}
else y--;
}
else if(y == startY){ //↓
x--;
}
}
return 1;
}
vector<int> solution(int rows, int columns, vector<vector<int>> queries) {
vector<int> answer;
vector<vector<int>> mmap(rows+1, vector<int>(columns+1));
int i,j,k;
int querySize = queries.size();
//make map
k=1;
for(i=1;i<=rows;i++){
for(j=1;j<=columns;j++){
mmap[i][j] = k;
k++;
}
}
map = mmap;
//rotation
for(i=0;i<querySize;i++){
answer.push_back(rotation(queries[i]));
}
return answer;
}