말랑한 하루
[SW Expert Academy] 1954 달팽이 숫자 [Java] 본문
반응형
[ 핵심풀이 ]
0) 방향을 바꿔주는것이 핵심!
1) 최대범위는 배열의개수 즉, 입력된 수의 제곱!
2) 방향을 바꿀땐 범위를 벗어나는지, 이미 밟고 간곳인지 확인!
[ 핵심소스 ]
//전체를 돌며 방향전환, 숫자찍기!
for(int i=0;i<N*N;i++) {
ary[y][x] = cnt++;
if (range(y+ay[dir],x+ax[dir])) dir = dir+1>3 ? 0:dir+1;
y+=ay[dir];
x+=ax[dir];
}
//범위확인!
static boolean range(int y, int x) {
return y<0||x<0||y>N-1||x>N-1||ary[y][x] != 0;
}
[ Java ]
import java.util.Arrays;
import java.util.Scanner;
public class _1954_달팽이숫자 {
static int N;
static int ary[][];
static void init() {
Scanner sc = new Scanner(System.in);
int tc = sc.nextInt();
for(int t=1;t<=tc;t++) {
N = sc.nextInt();
System.out.println("#"+tc);
solve();
view();
}
}
static int ay[] = {0,1,0,-1};
static int ax[] = {1,0,-1,0};
static void solve() {
int cnt=1;
ary = new int [N][N];
for(int item[] : ary)
Arrays.fill(item, 0);
int y=0, x=0, dir=0;
for(int i=0;i<N*N;i++) {
ary[y][x] = cnt++;
if (range(y+ay[dir],x+ax[dir])) dir = dir+1>3 ? 0:dir+1;
y+=ay[dir];
x+=ax[dir];
}
}
static boolean range(int y, int x) {
return y<0||x<0||y>N-1||x>N-1||ary[y][x] != 0;
}
static void view() {
for(int i=0;i<N;i++) {
for(int j=0;j<N;j++)
System.out.print(ary[i][j]+" ");
System.out.println();
}
}
public static void main(String[] args) {
init();
}
}
반응형
'문제풀이 > SWexpert Academy' 카테고리의 다른 글
[SW Expert Academy] 7793 오! 나의 여신님 [Java] (0) | 2021.02.05 |
---|---|
[SW Expert Academy] 1873 상호의 배틀필드 [Java] (0) | 2021.02.05 |
[SW Expert Academy] 1210 Ladder1 [Java] (0) | 2021.02.02 |
[SW Expert Academy] 1860 진기의 최고급 붕어빵 [Java] (0) | 2021.02.01 |
[SW Expert Academy] 9280 진용이네 주차타워 [Java] (0) | 2021.01.31 |
Comments