문제
해결 방법
어려운 문제인가 했는데, 글에 적힌대로 구현하니 작동이 되었다.
그래서 구현은 문제에서 제시한 가로, 세로 크기만큼 배열을 생성한 뒤에 숫자를 입력해주고,
그림의 1, 2, 3, 4번 순서대로 회전하게끔 반복문을 통해 구현했다.
그리고 최솟값을 찾을 수 있게 min 변수를 게속 체크하면서 확인하였다.
1번은 y값을 증가시켜 y2와 일치하면 멈춰주고,
2번은 x값을 증가시켜 x2와 일치하면 멈춰주었다.
3번은 y값을 감소시켜 y1과 일치하면 멈춰주고,
4번은 x값을 감소시켜 x1과 일치하면 멈춰주었다.
이런 방식으로 진행하면 한 바퀴 회전이 종료되고, 회전하면서 발견한 값 중 제일 작은 값을 반환한다.
코드
import java.util.*;
class Solution {
static int[][] map;
public int[] solution(int rows, int columns, int[][] queries) {
map = new int[rows + 1][columns + 1];
int num = 1;
for (int i = 1; i <= rows; i++) {
for (int j = 1; j <= columns; j++) {
map[i][j] = num;
num++;
}
}
ArrayList<Integer> list = new ArrayList<>();
for (int i = 0; i < queries.length; i++) {
int min = rotation(queries[i][0], queries[i][1], queries[i][2], queries[i][3]);
list.add(min);
}
int[] answer = new int[list.size()];
for (int i = 0; i < list.size(); i++) {
answer[i] = list.get(i);
}
return answer;
}
static int rotation(int x1, int y1, int x2, int y2) {
int pre = map[x1][y1]; // 이전 값을 저장
int tempX = x1;
int tempY = y1;
int min = pre; // 최솟값 저장용
while (true) {
tempY = tempY + 1; // 한 칸 우측 이동
int temp = map[tempX][tempY]; // 현재 칸 정보
min = Math.min(min, temp);
map[tempX][tempY] = pre; // 앞 칸 숫자를 현재 칸에 저장
pre = temp; // 현재 칸의 바뀌기 전 값 저장
if (tempY == y2) break;
}
while (true) {
tempX = tempX + 1; // 한 칸 아래로 이동
int temp = map[tempX][tempY];
min = Math.min(min, temp);
map[tempX][tempY] = pre;
pre = temp;
if (tempX == x2) break;
}
while (true) {
tempY = tempY - 1; // 한 칸 좌측 이동
int temp = map[tempX][tempY];
min = Math.min(min, temp);
map[tempX][tempY] = pre;
pre = temp;
if (tempY == y1) break;
}
while (true) {
tempX = tempX - 1; // 한 칸 위로 이동
int temp = map[tempX][tempY];
min = Math.min(min, temp);
map[tempX][tempY] = pre;
pre = temp;
if (tempX == x1) break;
}
return min;
}
}
'Algorithm > Programmers' 카테고리의 다른 글
[JAVA] Programmers : 등산코스 정하기 (0) | 2022.09.07 |
---|---|
[JAVA] Programmers : 배달 (0) | 2022.05.02 |
[JAVA] Programmers : 피로도 (0) | 2022.05.02 |
[JAVA] 광고 삽입 (0) | 2021.05.01 |
[JAVA] 합승 택시 요금 (0) | 2021.04.29 |