Google 태그 관리자 아이콘

알고리즘 풀이

.leetcode(54. Spiral Matrix)

silvergoni 2022. 3. 31. 08:41
반응형

https://leetcode.com/problems/spiral-matrix/

 

1. 2022.03.31 시도

소요시간: 11분

class Solution {
    private String[] d = new String[]{"RIGHT", "DOWN", "LEFT", "UP"};
    
    public List<Integer> spiralOrder(int[][] matrix) {
        int rowSize = matrix.length;
        int colSize = matrix[0].length;
        
        int p = 0;
        int q = -1;
        List<Integer> ret = new ArrayList<>();
        int directionIndex = 0;
        while ( rowSize !=0 && colSize != 0) {
            String direction = d[directionIndex];
            switch(direction) {
                case "RIGHT":
                    for (int i=0; i<colSize; i++) {
                        ret.add(matrix[p][++q]);
                    }
                    rowSize--;
                    break;
                case "DOWN":
                    for (int i=0; i<rowSize; i++) {
                        ret.add(matrix[++p][q]);
                    }
                    colSize--;
                    break;
                case "LEFT":
                    for (int i=0; i<colSize; i++) {
                        ret.add(matrix[p][--q]);
                    }
                    rowSize--;
                    break;
                case "UP":
                    for (int i=0; i<rowSize; i++) {
                        ret.add(matrix[--p][q]);
                    }
                    colSize--;
                    break;
            }
            directionIndex = (directionIndex+1)%4;
        }
        
        return ret;
    }
}

풀이 접근 과정

방향과 크기에 대해 생각했다. 방향은 순서대로 변화하고 크기도 일정크기만큼 줄어든다.

시작을 matrix밖에서 시작하기 때문에 q값을 -1부터 시작한다.

 

느낀점

  • medium 보고 살짝 긴장했는데 생가한대로 풀어서 한번에 정답 나오니 짜릿하다.

알고리즘 정리노트: .leetcode(알고리즘 문제풀이 접근)

반응형