매일 조금씩

Leet code (Medium): 54. Spiral Matrix - JAVA 본문

알고리즘/Matrix

Leet code (Medium): 54. Spiral Matrix - JAVA

mezo 2024. 10. 21. 14:32
728x90
반응형

 

칸을 이동하는 방향이 (0,0)에서 시작해서

오른쪽 -> 아래쪽 -> 왼쪽 -> 위쪽 -> (반복)

이라는 특징이 있다.

그래서 방향 벡터를 순서에 맞게 만들어서 구현했다.

 

class Solution {
    public List<Integer> spiralOrder(int[][] matrix) {
        List<Integer> res = new ArrayList<>();
        int m = matrix.length;
        int n = matrix[0].length;
        
        int row = 0; 
        int col = 0;
        int[] dr = {0,1,0,-1};
        int[] dc = {1,0,-1,0};
        int arrow = 0; 
        int count = 0;

        // 전체 칸을 다 돌면(count == m * n) 빠져나옴. 
        while(count < m * n){
            
            res.add(matrix[row][col]);
            matrix[row][col] = -101;    // 들렀던 곳은  -101로 업데이트
            count++;    // 처리한 칸 수 카운트++

            int nextr = row + dr[arrow];
            int nextc = col + dc[arrow];

            // 다음 칸이 matrix를 벗어나거나, 들른 칸이면, 방향을 바꿈.
            if(nextr < 0 || nextr >= m || nextc < 0 || nextc >= n || matrix[nextr][nextc] == -101){
                arrow = (arrow + 1) % 4;
            }

            // 다음 칸으로 row, col 업데이트
            row += dr[arrow];
            col += dc[arrow];
        }

        return res;

    }
}
728x90
반응형