https://leetcode.com/problems/spiral-matrix/
Given an m x n matrix, return all elements of the matrix in spiral order.
문제 자체는 심플하지만 구현하기엔 복잡한 문제였다. 특히 회전하면서 원소를 넣다가 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;
}
}