2021 Dev-Matching: 웹 백엔드 개발자 - 행렬 테두리 회전하기
Updated:
Java
2021 Dev-Matching: 웹 백엔드 개발자 - 행렬 테두리 회전하기
문제
접근 방법
queries
의 크기만큼 행렬 테두리를 회전시킨다.- 회전하는 도중 만나는 숫자들 중에서, 가장 작은 수를 결과를 담는 배열에 저장한다.
코드
import java.util.*;
class Solution {
static int[][] map;
static int n,m;
public static int[] solution(int rows, int columns, int[][] queries) {
int[] answer = new int[queries.length];
n = rows;
m = columns;
map = new int[n][m];
int idx = 1;
for(int i = 0; i < n; i++) {
for(int j = 0; j < m; j++) {
map[i][j] = idx++;
}
}
int difY, difX, min = Integer.MAX_VALUE, y, x, temp, ny,nx;
// 하, 우, 상, 좌
int[] dirY = {1,0,-1,0};
int[] dirX = {0,1,0,-1};
int[] mCnt;
int rIdx = 0;
for(int[] move : queries) {
difY = move[2] - move[0];
difX = move[3] - move[1];
idx = 0;
y = move[0] - 1; // 시작 y
x = move[1] - 1; // 시작 x
temp = map[y][x];
min = temp;
mCnt = new int[] {difY, difX, difY, difX}; // 회전을 할 횟수들
// 시계방향 ( 우, 하, 좌 , 상)으로 이동해야한다.
// 따라서, 차례로 대입하기 위해, 하, 우, 상, 좌 방향으로 이동하여 대입한다.
for(int cnt : mCnt) {
// cnt만큼 이동한다.
for(int i = 0; i < cnt; i++) {
ny = y + dirY[idx];
nx = x + dirX[idx];
map[y][x] = map[ny][nx];
y = ny;
x = nx;
min = Math.min(min, map[y][x]);
}
idx++; // 방향 전환
}
map[y][x + 1] = temp;
answer[rIdx] = min;
rIdx++;
}
Arrays.sort(answer);
return answer;
}
public static void main(String[] args) {
int[][] queries = new int[][] {{2,2,5,4},{3,3,6,6},{5,1,6,3}};
System.out.println(Arrays.toString(solution(6,6, queries)));
}
}