728x90
programmers.co.kr/learn/courses/30/lessons/77485
문제 풀이
public class Solution {
public static int[] solution(int rows, int columns, int[][] queries) {
int b[][] = new int[rows][columns], i, j, c = 0;
for( i = 0; i < rows; i++ )
for( j = 0; j < columns; j++ )
b[i][j] = ++c;
int q = queries.length, x1, y1, x2, y2, x, y, tmp, val, val_min;
int answer[] = new int[q];
for( i = 0; i < q; i++ ) {
x1 = --queries[i][0];
y1 = --queries[i][1];
x2 = --queries[i][2];
y2 = --queries[i][3];
val_min = tmp = b[x1][y1];
for( x = x1; x < x2; x++ ) {
val = b[x][y1];
val_min = val_min > val ? val : val_min;
b[x][y1] = b[x+1][y1];
}
for( y = y1; y < y2; y++ ) {
val = b[x2][y];
val_min = val_min > val ? val : val_min;
b[x2][y] = b[x2][y+1];
}
for( x = x2; x > x1; x-- ) {
val = b[x][y2];
val_min = val_min > val ? val : val_min;
b[x][y2] = b[x-1][y2];
}
for( y = y2; y > y1; y-- ) {
val = b[x1][y];
val_min = val_min > val ? val : val_min;
b[x1][y] = b[x1][y-1];
}
b[x][y+1] = tmp;
answer[i] = val_min;
}
return answer;
}
}
┌ 시계 방향으로 이동 => 한 칸씩 밀기
└ 반 시계 방향으로 이동 => 한 칸씩 땡기기
- (x1, y1) 에서 (x2, y2) 까지 반 시계 방향으로 테두리를 탐색하며 최솟값을 구함과 동시에 값을 한 칸씩 떙김
- x++ -> y++ -> x-- -> y--
반응형