코딩테스트 준비/SWEA
[JAVA][D2] 1954. 달팽이 숫자
AtoZ 개발자
2021. 1. 10. 16:57
반응형
문제
달팽이는 1부터 N*N까지의 숫자가 시계방향으로 이루어져 있다.
다음과 같이 정수 N을 입력 받아 N크기의 달팽이를 출력하시오.
[예제]
N이 3일 경우,
N이 4일 경우,
[제약사항]
달팽이의 크기 N은 1 이상 10 이하의 정수이다. (1 ≤ N ≤ 10)
[입력]
가장 첫 줄에는 테스트 케이스의 개수 T가 주어지고, 그 아래로 각 테스트 케이스가 주어진다.
각 테스트 케이스에는 N이 주어진다.
[출력]
각 줄은 '#t'로 시작하고, 다음 줄부터 빈칸을 사이에 두고 달팽이 숫자를 출력한다.
(t는 테스트 케이스의 번호를 의미하며 1부터 시작한다.)
예시
풀이
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Solution {
public static void main(String[] args) {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
try {
int T = Integer.parseInt(br.readLine());
// 테스트케이스 반복
for (int i = 1; i <= T; i++) {
int N = Integer.parseInt(br.readLine());
int num=1;
//x축 시작값
int startX=0;
//y축 시작값
int startY=0;
//x축 끝값
int endX=N-1;
//y축 끝값
int endY=N-1;
int[][] nums=new int[N][N];
while(num<=N*N) {
//좌측에서 우측으로 ->
for(int j=startY;j<=endY;j++) {
nums[startX][j]=num;
num++;
}
startX++;
//우측 상단에서 하단으로
for(int j=startX;j<=endX;j++) {
nums[j][endY]=num;
num++;
}
endY--;
//우측에서 좌측으로
for(int j=endY;j>=startY;j--) {
nums[endX][j]=num;
num++;
}
endX--;
//좌측 하단에서 상단으로
for(int j=endX;j>=startX;j--) {
nums[j][startY]=num;
num++;
}
startY++;
}
System.out.println("#" + i);
for(int a=0;a<N;a++) {
for(int b=0;b<N;b++) {
System.out.print(nums[a][b]+" ");
}
System.out.println();
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
반응형