반응형
츄르사려고 코딩하는 코집사입니다.
1. [SW expert Academy] SWEA 1954번 달팽이 숫자 자바(Java)
1) 난이도 : D2
2) 문제번호 : 1954번
3) 문제 출처
2. 문제
달팽이는 1부터 N*N까지의 숫자가 시계방향으로 이루어져 있다.
다음과 같이 정수 N을 입력 받아 N크기의 달팽이를 출력하시오.
[예제]
N이 3일 경우,
N이 4일 경우,
3. 제약사항
달팽이의 크기 N은 1 이상 10 이하의 정수이다. (1 ≤ N ≤ 10)
4. 입력
가장 첫 줄에는 테스트 케이스의 개수 T가 주어지고, 그 아래로 각 테스트 케이스가 주어진다.
각 테스트 케이스에는 N이 주어진다.
5. 출력
각 줄은 '#t'로 시작하고, 다음 줄부터 빈칸을 사이에 두고 달팽이 숫자를 출력한다.
(t는 테스트 케이스의 번호를 의미하며 1부터 시작한다.)
6. 풀이
- 테스트케이스를 보면, 오른쪽 이동, 아래 이동, 왼쪽 이동, 위로 이동이다.- 순서에 맞게 dx, dy 설정- 만약에 N이 1일 경우에는 1만 출력하면 되므로 1출력(for문을 안돌아도 된다.)- 3번째 이동까지는 N까지만 이동하면 되는데 오른쪽으로 이동할 때, y값이 N과 0을 벗어나면 안되고, x값이 N을 벗어나면 안되므로 if문 사용- 그 후에, 배열값이 0이 아닌 다른 값이 있을 경우에 방향 전환
7. 소스 코드
import java.util.Arrays;
import java.util.Scanner;
public class Solution {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int T = sc.nextInt();
//우,하,좌,상
int[] dx = {0,1,0,-1};
int[] dy = {1,0,-1,0};
for(int tc=1;tc<=T;tc++) {
int N = sc.nextInt();
if(N==1) {
System.out.printf("#%d\n",tc);
System.out.println(1);
continue;
}
int x = 0;
int y = 0;
//방향
int dir = 0;
int[][] arr = new int[N][N];
for(int i=0;i<N*N;i++) {
arr[x][y]=i+1;
x += dx[dir];
y += dy[dir];
if(x < 0 || x >= N || y < 0 || y >= N) {
//원래 자리로 돌려놓고
x -= dx[dir];
y -= dy[dir];
//방향전환
dir = (dir+1)%4;
//다시 이동
x += dx[dir];
y += dy[dir];
}
//배열값이 있을 경우에 다시 돌려놓고 방향전환 후 이동
if(arr[x][y]!=0) {
//원래 자리로 돌려놓고
x -= dx[dir];
y -= dy[dir];
//방향전환
dir = (dir+1)%4;
//다시 이동
x += dx[dir];
y += dy[dir];
}
}
System.out.printf("#%d\n",tc);
for(int i=0;i<N;i++) {
for(int j=0;j<N;j++) {
System.out.print(arr[i][j]+ " ");
}
System.out.println();
}
}
}
}
반응형
'알고리즘 > SW expert Academy' 카테고리의 다른 글
[SW expert Academy] SWEA 1218번 괄호 짝짓기 자바(Java) (0) | 2021.02.04 |
---|---|
[SW expert Academy] SWEA 5431번 민석이의 과제 체크하기 자바(Java) (0) | 2021.02.03 |
[SW expert Academy] SWEA 1974번 스도쿠 검증 자바(Java) (0) | 2021.02.03 |
[SW expert Academy] SWEA 1873번 상호의 배틀필드 자바(Java) (0) | 2021.02.03 |
[SW expert Academy] SWEA 1284번 수도 요금 경쟁 자바(Java) (0) | 2021.02.02 |
[SW expert Academy] SWEA 1986번 지그재그 숫자 자바(Java) (0) | 2021.02.02 |
[SW expert Academy] SWEA 2056번 연월일 달력 자바(Java) (0) | 2021.02.02 |
[SW expert Academy] SWEA 2071번 평균값 구하기 자바(Java) (0) | 2021.02.02 |
최근댓글