본문으로 바로가기

[LeetCode]54. Spiral Matrix

category 코딩테스트/LeetCode 2022. 11. 4. 12:20

https://leetcode.com/problems/spiral-matrix/?envType=study-plan&id=level-2 

 

Spiral Matrix - LeetCode

Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview.

leetcode.com

 

-> 아래와 같은 2차원 배열을 나선형으로 돌면서 List 배열에 담는 문제이다.

 

이 문제를 풀기 위해선

1. 2차원 배열의 row, col 이 0이 아닌지 확인! 

2. 2차원 배열의 원소 사이즈를 알아 내어, list에 담아 사이즈를 비교한다 (while문)

3. 상/하/좌/우 파트가 끝날때 마다 list 사이즈 확인하기

 

class Solution {

    
    public List<Integer> spiralOrder(int[][] matrix) {
        
        List<Integer> answer = new ArrayList<>();
        
        int top = 0;
        int bottom = matrix.length-1;
        int left = 0;
        int right = matrix[0].length-1;

        
        if(right < 0){
            for(int i = 0; i <= bottom; i++) answer.add(matrix[i][0]);
            return answer;
        } 
        
        if(bottom < 0){
            for(int i = 0; i <= right; i++) answer.add(matrix[0][i]);
            return answer;
        }
        
        int size = matrix[0].length * matrix.length;
        
        
        while(answer.size() < size){
 
            for(int i = left; i <= right; i++){
                answer.add(matrix[top][i]);
            }
            top+= 1; 
            
            if(answer.size() == size) break;
           
            for(int i = top; i <= bottom; i++){
                answer.add(matrix[i][right]);
            }
            right-=1;
            
            if(answer.size() == size) break;
            for(int i = right; i>= left; i--){
                answer.add(matrix[bottom][i]);
            }
            bottom-=1;
            
            if(answer.size() == size) break;
            for(int i = bottom; i >= top; i--){
                answer.add(matrix[i][left]);
            }
            left+=1;  
        }
        
        return answer;
    }
}