반응형
https://leetcode.com/problems/spiral-matrix-iii/
1. 2022.03.31 시도
소요시간: 21분
class Solution {
private String[] d = new String[]{"RIGHT", "DOWN", "LEFT", "UP"};
public int[][] spiralMatrixIII(int rows, int cols, int rStart, int cStart) {
int rowSize = 1;
int colSize = 1;
int p=rStart;
int q=cStart;
int[][] ret = new int[rows*cols][2];
int directionIndex = 0;
int counter = 0;
ret[counter++] = new int[]{p, q};
while(counter != rows*cols) {
String direction = d[directionIndex];
switch (direction) {
case "RIGHT":
for (int i=0; i<colSize; i++) {
if (isAvailable(p, ++q, rows, cols)) {
ret[counter++] = new int[]{p, q};
}
}
colSize++;
break;
case "DOWN":
for (int i=0; i<rowSize; i++) {
if (isAvailable(++p, q, rows, cols)) {
ret[counter++] = new int[]{p, q};
}
}
rowSize++;
break;
case "LEFT":
for (int i=0; i<colSize; i++) {
if (isAvailable(p, --q, rows, cols)) {
ret[counter++] = new int[]{p, q};
}
}
colSize++;
break;
case "UP":
for (int i=0; i<rowSize; i++) {
if (isAvailable(--p, q, rows, cols)) {
ret[counter++] = new int[]{p, q};
}
}
rowSize++;
break;
}
directionIndex = (directionIndex+1) % 4;
}
return ret;
}
private boolean isAvailable(int p, int q, int maxR, int maxC) {
if ( (0 <= p && p <= (maxR - 1)) && (0 <= q && q <= (maxC - 1))) {
return true;
}
return false;
}
}
풀이 접근 과정
첫번째 문제, 두번째 문제와 유사하지만 조금 더 업그레이드 되었다. 하지만 원리는 똑같다.
다만 해당 인덱스가 허용할만한 것인지 확인하는 과정만 추가되면 된다.
또 다른 점은 시작점부분인데 미리 초기세팅하면 된다.
느낀점
- 초기세팅이나 출력값이 이전과 달랐지만 기본적인 흐름은 똑같아서 풀기 어렵지 않았다.
알고리즘 정리노트: .leetcode(알고리즘 문제풀이 접근)
반응형
'알고리즘 풀이' 카테고리의 다른 글
.programmers(완주하지 못한 선수) (0) | 2022.04.07 |
---|---|
.leetcode(929. Unique Email Addresses) (0) | 2022.04.01 |
.leetcode(59. Spiral Matrix II) (0) | 2022.03.31 |
.leetcode(54. Spiral Matrix) (0) | 2022.03.31 |
.leetcode(917. Reverse Only Letters) (0) | 2022.03.30 |