30일 챌린지 열심히 해보려고 했는데...ㅋㅋㅋ
이번주차는 몇 개 못 풀었다...
뭐.. 변명이라면 변명이지만 해외 사이트이다 보니 한국 시간이 아니라서 타이밍이 자꾸 엇나갔다..
주어진 문제는 어려운 문제는 아니었다.
나선형으로 2차원 배열을 채워서 return 해주면 되는 문제이다.
나선형 방향으로 채워지므로 dirI, dirJ 배열로 방향을 순서대로 채워주었다.
사실 한쪽 방향으로 이동하는거이므로 배열을 벗어나는 조건은 방향 당 한가지이다.
그래서 switch문을 통해 해당 조건을 체크해줬고, 이미 배열에 값이 지정되어 있다면 방향을 바꿔야하므로 그 부분도 체크해줬다.
import java.util.*;
class Solution {
static int[] dirI = {0, 1, 0, -1};
static int[] dirJ = {1, 0, -1, 0};
public int[][] generateMatrix(int n) {
int[][] answer = new int[n][n];
int count = 1;
int dirNumber = 0;
int indexI = 0;
int indexJ = 0;
while(true) {
if(count > n * n) {
break;
}
answer[indexI][indexJ] = count++;
int nextI = indexI + dirI[dirNumber];
int nextJ = indexJ + dirJ[dirNumber];
switch (dirNumber) {
case 0:
if(nextJ >= n || answer[nextI][nextJ] != 0) {
dirNumber++;
dirNumber %= 4;
nextI = indexI + dirI[dirNumber];
nextJ = indexJ + dirJ[dirNumber];
}
case 1:
if(nextI >= n || answer[nextI][nextJ] != 0) {
dirNumber++;
dirNumber %= 4;
nextI = indexI + dirI[dirNumber];
nextJ = indexJ + dirJ[dirNumber];
}
case 2:
if(nextJ < 0 || answer[nextI][nextJ] != 0) {
dirNumber++;
dirNumber %= 4;
nextI = indexI + dirI[dirNumber];
nextJ = indexJ + dirJ[dirNumber];
}
default:
if(nextI < 0 || answer[nextI][nextJ] != 0) {
dirNumber++;
dirNumber %= 4;
nextI = indexI + dirI[dirNumber];
nextJ = indexJ + dirJ[dirNumber];
}
}
indexI = nextI;
indexJ = nextJ;
}
return answer;
}
}