https://school.programmers.co.kr/learn/courses/30/lessons/77485
정해진 범위(queries 배열)의 테두리를 시계방향으로 회전시키며, 그중 가장 작은 값을 찾는 문제
처음에 전체 1~정해진 크기 만큼의 배열을 만들어 줄다음
맨 처음 시작점인 좌상단 그 아래 (plate[s1 + 1][s2])를 첫 tmp로 하여 회전 방향에 따라 수들을 교체하였다
그리고 그중 가장 작은 값을 찾아 회전 종료 시에 answer에 추가되도록 하였다
import java.util.Arrays;
class Solution {
public int[] solution(int rows, int columns, int[][] queries) {
int[] answer = new int[queries.length];
int[][] plate = new int[rows][columns];
int n = 1;
int index = 0;
for (int i = 0; i < rows; i++) {
for (int j = 0; j < columns; j++) {
plate[i][j] = n;
n++;
}
}
for (int[] query : queries) {
int s1 = query[0] - 1;
int s2 = query[1] - 1;
int e1 = query[2] - 1;
int e2 = query[3] - 1;
int tmp = plate[s1 + 1][s2];
int min = tmp;
int tmp2 = 0;
for (int j = s2; j <= e2; j++) {
tmp2 = plate[s1][j];
plate[s1][j] = tmp;
tmp = tmp2;
min = Math.min(min, tmp);
}
for (int j = s1 + 1; j <= e1; j++) {
tmp2 = plate[j][e2];
plate[j][e2] = tmp;
tmp = tmp2;
min = Math.min(min, tmp);
}
for (int j = e2 - 1; j >= s2; j--) {
tmp2 = plate[e1][j];
plate[e1][j] = tmp;
tmp = tmp2;
min = Math.min(min, tmp);
}
for (int j = e1 - 1; j >= s1; j--) {
tmp2 = plate[j][s2];
plate[j][s2] = tmp;
tmp = tmp2;
min = Math.min(min, tmp);
}
answer[index] = min;
index++;
}
return answer;
}
}
'Programmers' 카테고리의 다른 글
[프로그래머스][JAVA]Lv. 2 - 모음사전 (0) | 2023.11.12 |
---|---|
[프로그래머스][JAVA]Lv. 2 - 2개 이하로 다른 비트 (0) | 2023.11.05 |
[프로그래머스][JAVA]Lv. 2 - 괄호 회전하기 (1) | 2023.10.15 |
[프로그래머스][JAVA]Lv. 2 - 순위 검색 (0) | 2023.10.09 |
[프로그래머스][JAVA]Lv. 2 - 이진 변환 반복하기 (1) | 2023.09.25 |