[LeetCode] Matrix Cells in Distance Order

아르당·2026년 3월 26일

LeetCode

목록 보기
224/261
post-thumbnail

문제를 이해하고 있다면 바로 풀이를 보면 됨
전체 코드로 바로 넘어가도 됨
마음대로 번역해서 오역이 있을 수 있음

Problem

4개의 정수 row, cols, rCenter, cCenter가 주어진다. rows x cols 행렬이 있고, 현재 좌표가 (rCenter, cCenter)인 셀이 있다.
행렬의 모든 셀의 좌표를 (rCenter, cCenter)와의 거리에 따라 가장 작은 값부터 가장 큰 값 순으로 정렬해서 반환해라. 이 조건을 만족하는한 어떤 순서로든 결과를 반환할 수 있다.

두 셀 (r1, c2)과 (r2, c2) 사이의 거리는 |r1 - r2| + |c1 - c2|이다.

Example

#1
Input: rows = 1, cols = 2, rCenter = 0, cCenter = 0
Output: [[0, 0], [0, 1]]

#2
Input: rows = 2, cols = 2, rCenter = 0, cCenter = 1
Output: [[0, 1], [0, 0], [1, 1], [1, 0]]

#3
Input: rows = 2, cols = 3, rCenter = 1, cCenter = 2
Output: [[1, 2], [0, 2], [1, 1], [0, 1], [1, 0], [0, 0]]

Constraints

  • 1 <= rows, cols <= 100
  • 0 <= rCenter < rows
  • 0 <= cCenter < cols

Solved

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 idx = 1;
        int lim = Math.max(rCenter, rows - rCenter - 1) + Math.max(cCenter, cols - cCenter - 1);

        for(int i = 1; i <= lim; i++){
            int r = rCenter - i;
            int c = cCenter;

            for(int j = i; j > 0; j--){
                if(r >= 0 && c >= 0){
                    result[idx++] = new int[] {r, c};
                }

                r++;
                c--;
            }

            for(int j = i; j > 0; j--){
                if(r < rows && c >= 0){
                    result[idx++] = new int[] {r, c};
                }

                r++;
                c++;
            }

            for(int j = i; j > 0; j--){
                if(r < rows && c < cols){
                    result[idx++] = new int[] {r, c};
                }

                r--;
                c++;
            }

            for(int j = i; j > 0; j--){
                if(r >= 0 && c < cols){
                    result[idx++] = new int[] {r, c};
                }

                r--;
                c--;
            }
        }

        return result;
    }
}
profile
내 마음대로 코드 작성하는 세상

0개의 댓글