Spiral Matrix

HeeSeong·2021년 8월 22일
0

LeetCode

목록 보기
15/38
post-thumbnail

🔗 문제 링크

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


🔍 문제 설명


Given an m x n matrix, return all elements of the matrix in spiral order.


⚠️ 제한사항


  • m=matrix.lengthm = matrix.length

  • n=matrix[i].lengthn = matrix[i].length

  • 1<=m,n<=101 <= m, n <= 10

  • 100<=matrix[i][j]<=100-100 <= matrix[i][j] <= 100



🗝 풀이 (언어 : Java)


문제 자체는 심플하지만 구현하기엔 복잡한 문제였다. 특히 회전하면서 원소를 넣다가 while문 조건인 정답 개수가 다 채워지면 그만 넣어야하는데 rowStart, colEnd가 증감하면서 위의 아래쪽과 왼쪽의 조건식이 True가 되어 원소가 추가로 채워지는 케이스를 제외해야하는 것을 아는게 까다로웠다.

import java.util.ArrayList;
import java.util.List;

class Solution {
    public List<Integer> spiralOrder(int[][] matrix) {
        List<Integer> answer = new ArrayList<>();
        int rowStart = 0, rowEnd = matrix.length;
        int colStart = 0, colEnd = matrix[0].length;
        // 나선형 회전
        while (answer.size() != (matrix.length * matrix[0].length)) {
            // 위쪽
            for (int i=colStart; i<colEnd; i++)
                answer.add(matrix[rowStart][i]);
            rowStart++;
            // 오른쪽
            for (int i=rowStart; i<rowEnd; i++)
                answer.add(matrix[i][colEnd-1]);
            colEnd--;
            // 아래쪽, 정답 개수가 다 차고도 조건상 추가되는 경우 방지
            for (int i=colEnd-1; i >=colStart && answer.size() != (matrix.length * matrix[0].length); i--)
                answer.add(matrix[rowEnd-1][i]);
            rowEnd--;
            // 왼쪽
            for (int i=rowEnd-1; i>=rowStart && answer.size() != (matrix.length * matrix[0].length); i--)
                answer.add(matrix[i][colStart]);
            colStart++;
        }
        return answer;
    }
}
profile
끊임없이 성장하고 싶은 개발자

0개의 댓글