Leetcode Java Matrix Cells in Distance Order
업데이트:
문제
코드
class Solution {
public int[][] allCellsDistOrder(int rows, int cols, int rCenter, int cCenter) {
int[][] result = new int[rows * cols][];
result[0] = new int[] { rCenter, cCenter };
int index = 1;
int max = Math.max(rCenter, rows - rCenter - 1) + Math.max(cCenter, cols - cCenter - 1);
for (int i = 1; i <= max; i++) {
int row = rCenter - i;
int col = cCenter;
for (int j = i; j > 0; j--) {
if (row >= 0 && col >= 0) {
result[index++] = new int[] { row, col };
}
row++;
col--;
}
for (int j = i; j > 0; j--) {
if (row < rows && col >= 0) {
result[index++] = new int[] { row, col };
}
row++;
col++;
}
for (int j = i; j > 0; j--) {
if (row < rows && col < cols) {
result[index++] = new int[] { row, col };
}
row--;
col++;
}
for (int j = i; j > 0; j--) {
if (row >= 0 && col < cols) {
result[index++] = new int[] { row, col };
}
row--;
col--;
}
}
return result;
}
}
결과
설명
-
$rows \times cols$ 크기의 2차원 배열 내 [rCenter, cCenter] 위치에서 가장 가까운 거리부터 먼 거리까지 순서대로 반환하는 문제이다.
- 문제 풀이에 필요한 변수를 정의한다.
- result는 가까운 거리 순서대로 저장할 배열로, 가능한 셀의 갯수인 $rows \times cols$ 크기의 2차원 정수 배열로 초기화하고 첫 값을 시작 위치인 [rCenter, cCenter]를 넣어준다.
- index는 result에 저장할 위치 값을 저장할 변수로, 첫 값이 포함되었으므로 1로 초기화한다.
- max는 현재 위치인 [rCenter, cCenter]에서 모서리까지 가장 먼 거리를 저장할 변수로, rCenter와 $rows - rCenter - 1$인 행의 최대 이동거리 중 큰 값과 cCenter와 $cols - cCenter - 1$ 중 큰 값을 더해서 넣어준다.
- 1부터 max 이하까지 i를 증가시키며 아래를 반복한다.
- row에 $rCenter - i$를, col에 cCenter를 넣어준다.
- 위-좌측의 대각선 방향으로 탐색하기 위해서 i부터 0 초과까지 j를 감소시키며 아래를 수행한다.
- [row, col] 위치가 배열 내에 존재하는 0 이상인 경우, result[index]에 [row, col] 위치를 넣고 index를 증가시킨다.
- 위치 이동을 위해서 row를 증가시키고, col을 감소시킨다.
- 좌측-아래의 대각선 방향으로 탐색하기 위해서 i부터 0 초과까지 j를 감소시키며 아래를 수행한다.
- [row, col] 위치가 배열 내에 존재하는 row가 rows 미만이면서 col이 0 이상인 경우, result[index]에 [row, col] 위치를 넣고 index를 증가시킨다.
- 위치 이동을 위해서 row와 col을 증가시킨다.
- 아래-우측의 대각선 방향으로 탐색하기 위해서 i부터 0 초과까지 j를 감소시키며 아래를 수행한다.
- [row, col] 위치가 배열 내에 존재하는 row가 rows 미만이면서 col이 colse 미만인 경우, result[index]에 [row, col] 위치를 넣고 index를 증가시킨다.
- 위치 이동을 위해서 row를 감소시키고, col을 증가시킨다.
- 우측-위의 대각선 방향으로 탐색하기 위해서 i부터 0 초과까지 j를 감소시키며 아래를 수행한다.
- [row, col] 위치가 배열 내에 존재하는 row가 0 이상이면서 col이 colse 미만인 경우, result[index]에 [row, col] 위치를 넣고 index를 증가시킨다.
- 위치 이동을 위해서 row와 col을 감소시킨다.
- 반복이 완료되면 결과가 저장된 result를 주어진 문제의 결과로 반환한다.
소스
Sample Code는 여기에서 확인 가능합니다.
댓글남기기