직사각형 영역이 주어지면 해당 영역의 테두리를 시계방향으로 한 칸씩 회전시킵니다.
회전시키는 query를 여러개 줄테니 시뮬레이션 하고, 각 회전이벤트마다 가장 큰 멤버를 반환하시오.
시뮬레이션
그리고 회전마다 잘 결과물이 뽑혔는지 프린트 하는것도 필요한 것 같다.
def solution(rows, columns, queries):
answer = []
tab = [[0 for col in range(columns+1)] for row in range(rows+1)]
val = 1
for i in range(1, rows+1):
for j in range(1, columns+1):
tab[i][j] = val
val+=1
for query in queries:
x1,y1,x2,y2 = query
seed = tab[x1][y1]
min_mem = seed
for x in range(x1,x2):
tab[x][y1] = tab[x+1][y1]
min_mem = min(min_mem, tab[x][y1])
for y in range(y1, y2):
tab[x2][y] = tab[x2][y+1]
min_mem = min(min_mem, tab[x2][y])
for x in range(x2,x1,-1):
tab[x][y2] = tab[x-1][y2]
min_mem = min(min_mem, tab[x][y2])
for y in range(y2, y1,-1):
tab[x1][y] =tab[x1][y-1]
min_mem = min(min_mem, tab[x1][y])
tab[x1][y1+1] = seed
answer.append(min_mem)
return answer
#include <string>
#include <vector>
#include<iostream>
#include<math.h>
using namespace std;
int tab[101][101];
vector<int> solution(int rows, int columns, vector<vector<int>> queries) {
vector<int> answer;
int val =1;
for(int i = 1;i<=rows;i++){
for(int j = 1;j<=columns;j++){
tab[i][j] =val++;
}
}
for(int ctr =0;ctr<queries.size();ctr++){
int p[4];
for(int i = 0;i<4;i++) p[i] = queries[ctr][i];
int x1 = p[0],y1 = p[1],x2 = p[2],y2 = p[3];
int seed = tab[p[0]][p[1]];
int min_mem = seed;
for(int i = x1;i<x2;i++){
tab[i][y1] = tab[i+1][y1];
min_mem = min(min_mem,tab[i][y1]);
}
for(int j = y1;j<y2;j++){
tab[x2][j] = tab[x2][j+1];
min_mem = min(min_mem,tab[x2][j]);
}
for(int i = x2;i>x1;i--){
tab[i][y2] = tab[i-1][y2];
min_mem = min(min_mem,tab[i][y2]);
}
for(int j = y2;j>y1;j--){
tab[x1][j] = tab[x1][j-1];
min_mem = min(min_mem,tab[x1][j]);
}
tab[x1][y1+1] = seed;
//min_mem = min(min_mem, tab[x1][y1+1]); //없어도 됨 seed에서 이미 검사했기 때문
//print_tab(rows, columns);
answer.push_back(min_mem);
}
return answer;
}