💡 Info
- 난이도: D2
- 시간 제한: 10개의 테스트 케이스를 합쳐서 30초
- 메모리 제한: 힙, 정적 메모리 함쳐서 256MB 이내, 스택 메모리 1MB 이내
SWEA 링크: https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV5PobmqAPoDFAUq
풀이 링크(GitHub): hayannn/CodingTest_Java/SWEA/D2/1954. 달팽이 숫자
2
3
4
#1
1 2 3
8 9 4
7 6 5
#2
1 2 3 4
12 13 14 5
11 16 15 6
10 9 8 7
실제 풀이 시간 : 47분
import java.util.Scanner;
class Solution {
public static void main(String args[]) {
Scanner sc = new Scanner(System.in);
int T = sc.nextInt();
for (int test_case = 1; test_case <= T; test_case++) {
int n = sc.nextInt();
int[][] multi = new int[n][n];
int r = 0;
int c = 0;
int num = 1;
while (num <= n * n) {
// 우
while (c < n && multi[r][c] == 0) {
multi[r][c++] = num++;
}
c--; // 범위를 벗어난 열을 되돌아감
r++; // 행을 증가시켜 범위 안으로 이동
// 하
while (r < n && multi[r][c] == 0) {
multi[r++][c] = num++;
}
r--; // 범위를 벗어난 행을 되돌아감
c--; // 열을 감소시켜 범위 안으로 이동
// 좌
while (c >= 0 && multi[r][c] == 0) {
multi[r][c--] = num++;
}
c++; // 범위를 벗어난 열을 되돌아감
r--; // 행을 감소시켜 범위 안으로 이동
// 상
while (r >= 0 && multi[r][c] == 0) {
multi[r--][c] = num++;
}
r++; // 범위를 벗어난 행을 되돌아감
c++; // 열을 증가시켜 범위 안으로 이동
}
System.out.println("#" + test_case);
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++)
System.out.print(multi[i][j] + " ");
System.out.println();
}
}
}
}