프로그래머스 LV2. 2021 Dev-Matching: 웹 백엔드 개발자(상반기) 행렬 테두리 회전하기
행렬의 행 개수 rows, 열 개수 columns, 그리고 회전들의 목록 queries가 주어질 때, 각 회전들을 배열에 적용한 뒤, 그 회전들에 의해 위치가 바뀐 숫자들 중 가장 작은 숫자들을 순서대로 배열에 담아 return하는 solution 함수를 작성하는 문제이다.
class Solution {
int[][] matrix;
public int[] solution(int rows, int columns, int[][] queries) {
int[] answer = new int[queries.length];
// matrix 초기화
matrix = new int[rows][columns];
int n = 1;
for (int i = 0; i < matrix.length; i++) {
for (int j = 0; j < matrix[i].length; j++) {
matrix[i][j] = n++;
}
}
for (int i = 0; i < queries.length; i++) {
int min = rotation(queries[i][0]-1, queries[i][1]-1, queries[i][2]-1, queries[i][3]-1);
answer[i] = min;
}
return answer;
}
private int rotation(int x1, int y1, int x2, int y2) {
int min = matrix[x1][y1];
// 상좌우
int stored = min;
for (int i = y1+1; i <= y2; i++) {
if(stored < min) {
min = stored;
}
int tmp = matrix[x1][i];
matrix[x1][i] = stored;
stored = tmp;
}
// 우상하
for (int i = x1+1; i <= x2; i++) {
if(stored < min) {
min = stored;
}
int tmp = matrix[i][y2];
matrix[i][y2] = stored;
stored = tmp;
}
// 하우좌
for (int i = y2-1; i >= y1; i--) {
if(stored < min) {
min = stored;
}
int tmp = matrix[x2][i];
matrix[x2][i] = stored;
stored = tmp;
}
// 좌하상
for (int i = x2-1; i >= x1; i--) {
if(stored < min) {
min = stored;
}
int tmp = matrix[i][y1];
matrix[i][y1] = stored;
stored = tmp;
}
return min;
}
}