문제
문제 링크
문제 이해하기
- 나선형으로 배열을 채우는 문제
- 같은 방향을 수행하더라도, 시작하는 행 또는 열은 다를 수 있습니다.
- 필요한 방향과 인덱스를 조절하기 위해 switch-case 문을 사용합니다.
- 각 방향별로 배열을 채우는 과정을 구현하고, 반복할 때마다 방향을 변경하도록 합니다.
- 모든 배열 요소가 채워질 때까지 반복합니다.
실수와 해결
- switch-case 문 내에서 각 case에 대한 작업을 마친 후에 break 문을 추가하여 다음 case로 넘어가지 않도록 해결했습니다.
- 배열을 나선형으로 채우는 로직에서 모든 요소를 채우면 반복을 종료하는 조건을 설정합니다.
- case에 따라 증가가 아닌 감소하는 for문의 조건식 작성할 때
i가 n - 1 부터 시작하여 i-- 하는 for문에서의 조건식을 i == 0 으로 설정하여 반복문이 정상적으로 수행되지 않는 문제가 발생했습니다. i가 0이 될 때까지 반복문을 수행해야 하므로 i가 n - 1 부터 감소하여 0에 도달할 때까지를 나타내는 조건식인 i >= 0 으로 수정하여 해결했습니다.
<참고>
for문의 증가하는 조건식과 감소하는 조건식 작성하는 방법
제출한 코드
class Solution {
public int[][] solution(int n) {
int[][] answer = new int[n][n];
int index = 0;
int num = 1;
int startRow = 0;
int startCol = n - 1;
int endRow = n - 1;
int endCol = 0;
while (num <= n * n) {
switch (index) {
case 0: {
for (int i = 0; i < n; i++) {
if (answer[startRow][i] == 0) {
answer[startRow][i] = num++;
}
}
startRow++;
index++;
break;
}
case 1: {
for (int i = 0; i < n; i++) {
if (answer[i][startCol] == 0) {
answer[i][startCol] = num++;
}
}
startCol--;
index++;
break;
}
case 2: {
for (int i = n-1; i >= 0; i--) {
if (answer[endRow][i] == 0) {
answer[endRow][i] = num++;
}
}
endRow--;
index++;
break;
}
case 3: {
for (int i = n - 1; i >= 0; i--) {
if (answer[i][endCol] == 0) {
answer[i][endCol] = num++;
}
}
endCol++;
index = 0;
break;
}
}
}
return answer;
}
}
심화학습 계획
- 코드 리팩토링
코드의 가독성과 유지보수성을 높이기 위해 리팩토링 수행하기